count_users() { struct vqpasswd *pw; CurPopAccounts = 0; pw = vauth_getall(Domain,1,0); while(pw!=NULL){ ++CurPopAccounts; pw = vauth_getall(Domain,0,0); } }
int show_user_lines(char *user, char *dom, time_t mytime, char *dir) { int i,j,k,startnumber,moreusers = 1; FILE *fs; struct vqpasswd *pw; int totalpages; int bounced; if (MaxPopAccounts == 0) return 0; /* Get the default catchall box name */ if ((fs=fopen(".qmail-default","r")) == NULL) { fprintf(actout,"<tr><td colspan=\"5\">%s .qmail-default</tr></td>", get_html_text("144")); vclose(); exit(0); } fgets(TmpBuf, MAX_BUFF, fs); fclose(fs); if (*SearchUser) { pw = vauth_getall(dom,1,1); for (k=0; pw!=NULL; k++) { if ((!SearchUser[1] && *pw->pw_name >= *SearchUser) || ((!strcmp(SearchUser, pw->pw_name)))) { break; } pw = vauth_getall(dom,0,0); } if (k == 0) sprintf(Pagenumber, "1"); else sprintf(Pagenumber, "%d", (k/MAXUSERSPERPAGE)+1); } /* Determine number of pages */ pw = vauth_getall(dom,1,1); for (k=0; pw!=NULL; k++) pw = vauth_getall(dom, 0, 0); if (k == 0) totalpages = 1; else totalpages = ((k/MAXUSERSPERPAGE)+1); /* End determine number of pages */ if (atoi(Pagenumber)==0) *Pagenumber='1'; if ( strstr(TmpBuf, "bounce-no-mailbox") != NULL ) { bounced = 1; } else if ( strstr(TmpBuf, "@") != NULL ) { bounced = 0; } else { bounced = 0; i = strlen(TmpBuf); --i; TmpBuf[i] = 0; /* take off newline */ for(;TmpBuf[i]!='/';--i); for(j=0,++i;TmpBuf[i]!=0;++j,++i) TmpBuf3[j] = TmpBuf[i]; TmpBuf3[j]=0; } startnumber = MAXUSERSPERPAGE * (atoi(Pagenumber) - 1); /* * check to see if there are any users to list, * otherwise repeat previous page * */ pw = vauth_getall(dom,1,1); if ( AdminType==DOMAIN_ADMIN || (AdminType==USER_ADMIN && strcmp(pw->pw_name,Username)==0)){ for (k = 0; k < startnumber; ++k) { pw = vauth_getall(dom,0,0); } } if (pw == NULL) { fprintf(actout, "<tr><td colspan=\"5\" bgcolor=%s>%s</td></tr>\n", get_color_text("000"), get_html_text("131")); moreusers = 0; } else { while ((pw != NULL) && ((k < MAXUSERSPERPAGE + startnumber) || (AdminType!=DOMAIN_ADMIN || AdminType!=DOMAIN_ADMIN || (AdminType==USER_ADMIN && strcmp(pw->pw_name,Username)==0)))) { if (AdminType==DOMAIN_ADMIN || (AdminType==USER_ADMIN && strcmp(pw->pw_name,Username)==0)) { fprintf(actout, "<tr bgcolor=%s>", get_color_text("000")); fprintf(actout, "<td align=\"left\">%s</td>", pw->pw_name); fprintf(actout, "<td align=\"left\">%s</td>", pw->pw_gecos); fprintf(actout, "<td align=\"center\">"); fprintf(actout, "<a href=\"%s/com/moduser?user=%s&dom=%s&time=%d&moduser=%s\">", CGIPATH,user,dom,mytime,pw->pw_name); fprintf(actout, "<img src=\"/images/qmailadmin/delete.png\" border=\"0\"></a>"); fprintf(actout, "</td>"); /* if the user is postmaster, or has admin privileges, * prevent deleting */ if (strncmp(pw->pw_name, "postmaster", 11) == 0 || (strncmp(pw->pw_name, Username, strlen(pw->pw_name)) == 0 && strlen(pw->pw_name) == strlen(Username) && AdminType==DOMAIN_ADMIN)) { fprintf(actout, "<td align=\"center\">"); fprintf(actout, "<img src=\"/images/qmailadmin/disabled.png\" border=\"0\">"); fprintf(actout, "</td>"); /* if the user has admin privileges and pw->pw_name is not * the user or postmaster, allow deleting */ } else if (AdminType==DOMAIN_ADMIN && strncmp(pw->pw_name, Username, strlen(pw->pw_name)) != 0 ) { fprintf(actout, "<td align=\"center\">"); fprintf(actout, "<a href=\"%s/com/deluser?user=%s&dom=%s&time=%d&deluser=%s\">", CGIPATH,user,dom,mytime,pw->pw_name); fprintf(actout, "<img src=\"/images/qmailadmin/delete.png\" border=\"0\"></a>"); fprintf(actout, "</td>"); /* special case when pw->pw_name contains the user's name, but * is not the user or postmaster, allow deleting */ } else if (AdminType==DOMAIN_ADMIN && strncmp(pw->pw_name, Username, strlen(pw->pw_name)) == 0 && strlen(pw->pw_name) != strlen(Username)) { fprintf(actout, "<td align=\"center\">"); fprintf(actout, "<a href=\"%s/com/deluser?user=%s&dom=%s&time=%d&deluser=%s\">", CGIPATH,user,dom,mytime,pw->pw_name); fprintf(actout, "<img src=\"/images/qmailadmin/delete.png\" border=\"0\"></a>"); fprintf(actout, "</td>"); /* else, don't allow deleting */ } else { fprintf(actout, "<td align=\"center\">"); fprintf(actout, "<img src=\"/images/qmailadmin/disabled.png\" border=\"0\">"); fprintf(actout, "</td>"); } if (bounced==0 && strncmp(pw->pw_name,TmpBuf3,MAX_BUFF) == 0) { fprintf(actout, "<td align=\"center\">%s</td>", get_html_text("132")); } else if (AdminType==DOMAIN_ADMIN) { fprintf(actout, "<td align=\"center\">"); fprintf(actout, "<a href=\"%s/com/setdefault?user=%s&dom=%s&time=%d&deluser=%s&page=%s\">", CGIPATH,user,dom,mytime,pw->pw_name,Pagenumber); fprintf(actout, "<img src=\"/images/qmailadmin/delete.png\" border=\"0\"></a>"); fprintf(actout, "</td>"); } else { fprintf(actout, "<td align=\"center\">"); fprintf(actout, "<img src=\"/images/qmailadmin/disabled.png\" border=\"0\">"); fprintf(actout, "</td>"); } fprintf(actout, "</tr>\n"); } pw = vauth_getall(dom,0,0); ++k; } } if (AdminType == DOMAIN_ADMIN) { #ifdef USER_INDEX fprintf(actout, "<tr bgcolor=%s>", get_color_text("000")); fprintf(actout, "<td colspan=\"5\" align=\"center\">"); fprintf(actout, "<hr>"); fprintf(actout, "<b>%s</b>", get_html_text("133")); fprintf(actout, "<br>"); for (k = 97; k < 123; k++) { fprintf(actout, "<a href=\"%s/com/showusers?user=%s&dom=%s&time=%d&searchuser=%c\">%c</a>\n", CGIPATH,user,dom,mytime,k,k); } fprintf(actout, "<br>"); for (k = 0; k < 10; k++) { fprintf(actout, "<a href=\"%s/com/showusers?user=%s&dom=%s&time=%d&searchuser=%d\">%d</a>\n", CGIPATH,user,dom,mytime,k,k); } fprintf(actout, "</td>"); fprintf(actout, "</tr>\n"); fprintf(actout, "<tr bgcolor=%s>", get_color_text("000")); fprintf(actout, "<td colspan=\"5\">"); fprintf(actout, "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" width=\"100%\"><tr><td align=\"center\"><br>"); fprintf(actout, "<form method=\"get\" action=\"%s/com/showusers\">", CGIPATH); fprintf(actout, "<input type=\"hidden\" name=\"user\" value=\"%s\">", user); fprintf(actout, "<input type=\"hidden\" name=\"dom\" value=\"%s\">", dom); fprintf(actout, "<input type=\"hidden\" name=\"time\" value=\"%d\">", mytime); fprintf(actout, "<input type=\"text\" name=\"searchuser\" value=\"%s\"> ", SearchUser); fprintf(actout, "<input type=\"submit\" value=\"%s\">", get_html_text("204")); fprintf(actout, "</form>"); fprintf(actout, "</td></tr></table>"); fprintf(actout, "<hr>"); fprintf(actout, "</td></tr>\n"); #endif fprintf(actout, "<tr bgcolor=%s>", get_color_text("000")); fprintf(actout, "<td colspan=\"5\" align=\"right\">"); #ifdef USER_INDEX fprintf(actout, "<font size=\"2\"><b>"); fprintf(actout, "[ "); /* only display "previous page" if pagenumber > 1 */ if (atoi(Pagenumber) > 1) { fprintf(actout, "<a href=\"%s/com/showusers?user=%s&dom=%s&time=%d&page=%d\">%s</a>", CGIPATH,user,dom,mytime, atoi(Pagenumber)-1 ? atoi(Pagenumber)-1 : atoi(Pagenumber), get_html_text("135")); fprintf(actout, " | "); } /* fprintf(actout, "<a href=\"%s/com/showusers?user=%s&dom=%s&time=%d&page=%s\">%s</a>", CGIPATH,user,dom,mytime,Pagenumber,get_html_text("136")); */ if (moreusers && atoi(Pagenumber) < totalpages) { fprintf(actout,"<a href=\"%s/com/showusers?user=%s&dom=%s&time=%d&page=%d\">%s</a>", CGIPATH,user,dom,mytime,atoi(Pagenumber)+1, get_html_text("137")); fprintf(actout, " | "); } /* fprintf(actout, " | ");*/ #endif fprintf(actout, "<a href=\"%s/com/deleteall?user=%s&dom=%s&time=%d\">%s</a>", CGIPATH,user,dom,mytime,get_html_text("235")); fprintf(actout, " | "); fprintf(actout, "<a href=\"%s/com/bounceall?user=%s&dom=%s&time=%d\">%s</a>", CGIPATH,user,dom,mytime,get_html_text("134")); fprintf(actout, " | "); fprintf(actout, "<a href=\"%s/com/setremotecatchall?user=%s&dom=%s&time=%d\">%s</a>", CGIPATH,user,dom,mytime,get_html_text("206")); fprintf(actout, " ]"); fprintf(actout, "</b></font>"); fprintf(actout, "</td></tr>\n"); } return 0; }
int main(int argc, char **argv) { FILE *fs; int first; struct passwd *pw; char *tmpstr; uid_t uid; gid_t gid; get_options(argc,argv); fs = fopen("/usr/tmp/vreorg", "w+"); if ( fs == NULL ) { perror("vreorg:"); exit(errno); } first = 1; printf("getting user list\n"); while( (pw=vauth_getall(Domain, first, 0))){ first = 0; fprintf(fs, "%s %s %s\n", pw->pw_user, Domain, pw->pw_dir); } rewind(fs); printf("done.\n"); vget_assign(Domain, DomainDir, MAX_BUFF, &uid, &gid); /* reset dir control external to this program */ printf("resetting the directory layout status\n"); vdel_dir_control(Domain); printf("working on users\n"); while ( fgets(TmpBuf, MAX_BUFF, fs) != NULL ) { /* user */ tmpstr = strtok(TmpBuf, TOKENS); if ( tmpstr == NULL ) continue; strcpy( User, tmpstr); /* domain */ tmpstr = strtok(NULL, TOKENS); if ( tmpstr == NULL ) continue; strcpy( Domain, tmpstr); /* old dir */ tmpstr = strtok(NULL, TOKENS); if ( tmpstr == NULL ) continue; strcpy( OldDir, tmpstr); /* get next dir */ open_big_dir(Domain); tmpstr = next_big_dir(uid, gid); close_big_dir(Domain, uid, gid); /* get old pw struct */ pw = vauth_getpw( User, Domain); /* get space for pw_dir */ pw->pw_dir = malloc(MAX_BUFF); /* format new directory string */ if ( slen(tmpstr) > 0 ) { sprintf(pw->pw_dir, "%s/%s/%s", DomainDir, tmpstr, User); } else { sprintf(pw->pw_dir, "%s/%s", DomainDir, User); } printf("%s@%s old %s new %s ", User, Domain, OldDir, pw->pw_dir); /* update database */ vauth_setpw( pw, domain ); /* move directory */ rename(OldDir, pw->pw_dir); /* free directory memory */ free(pw->pw_dir); printf("done\n"); } fclose(fs); unlink("/usr/tmp/vreorg"); exit(0); }