/* $Id$ */
#include "bbs.h"
#ifndef PLAY_ANGEL
int main(){ return 0; }
#else
int total[MAX_USERS + 1];
int *list;
int count;
char *mailto = NULL;
char *mailfile = NULL;
int ListCmp(const void * a, const void * b){
return *(int*)b - *(int*)a;
}
int RejCmp(const void * a, const void * b){
return strcasecmp(SHM->userid[*(int*)a - 1], SHM->userid[*(int*)b - 1]);
}
void readData();
void sendResult();
void mailUser(char *userid);
int main(int argc, char* argv[]){
if (argc < 2) {
fprintf(stderr, "Usage: %s file [userid]\n", argv[0]);
exit(1);
}
mailfile = argv[1];
if (argc > 2)
mailto = argv[2];
readData();
if (mailto)
mailUser(mailto);
else
sendResult();
return 0;
}
int mailalertuser(char* userid)
{
userinfo_t *uentp=NULL;
if (userid[0] && (uentp = search_ulist_userid(userid)))
uentp->alerts|=ALERT_NEW_MAIL;
return 0;
}
void readData(){
int i, j;
userec_t user;
FILE* fp;
attach_SHM();
fp = fopen(BBSHOME "/.PASSWDS", "rb");
j = count = 0;
while (fread(&user, sizeof(userec_t), 1, fp) == 1) {
++j; /* j == uid */
if (user.userlevel & PERM_ANGEL) {
++count;
++total[j]; /* make all angel have total > 0 */
} else { /* don't have PERM_ANGEL */
total[j] = INT_MIN;
}
}
fclose(fp);
list = (int *) malloc(count * sizeof(int));
j = 0;
for (i = 1; i <= MAX_USERS; ++i)
if (total[i] > 0) {
list[j] = i;
++j;
}
}
void sendResult(){
int i;
for (i = 0; i < count; ++i) {
mailUser(SHM->userid[list[i] - 1]);
// printf("%s\n", SHM->userid[list[i] - 1]);
}
}
void mailUser(char *userid)
{
int count;
FILE *fp, *fp2;
time4_t t;
fileheader_t header;
struct stat st;
char filename[512];
fp2 = fopen(mailfile, "r");
if (fp2 == NULL) {
fprintf(stderr, "Cannot open file %s\n", mailfile);
return;
}
sprintf(filename, BBSHOME "/home/%c/%s", userid[0], userid);
if (stat(filename, &st) == -1) {
if (mkdir(filename, 0755) == -1) {
fprintf(stderr, "mail box create error %s \n", filename);
return;
}
}
else if (!(st.st_mode & S_IFDIR)) {
fprintf(stderr, "mail box error\n");
return;
}
stampfile(filename, &header);
fp = fopen(filename, "w");
if (fp == NULL) {
fprintf(stderr, "Cannot open file %s\n", filename);
return;
}
t = time(NULL);
fprintf(fp, "作者: 小天使系統\n"
"標題: 給小天使的一封信\n"
"時間: %s\n",
ctime4(&t));
while ((count = fread(filename, 1, sizeof(filename), fp2))) {
fwrite(filename, 1, count, fp);
}
fclose(fp);
fclose(fp2);
strcpy(header.title, "給小天使的一封信");
strcpy(header.owner, "小天使系統");
sprintf(filename, BBSHOME "/home/%c/%s/.DIR", userid[0], userid);
append_record(filename, &header, sizeof(header));
mailalertuser(userid);
printf("%s\n", userid);
}
#endif /* defined PLAY_ANGEL */