Exemplo n.º 1
0
count_users()
{
 struct vqpasswd *pw;

  CurPopAccounts = 0;
  pw = vauth_getall(Domain,1,0);
  while(pw!=NULL){
    ++CurPopAccounts;
    pw = vauth_getall(Domain,0,0);
  }
}
Exemplo n.º 2
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\">&nbsp;", 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, "[&nbsp;");
      /* 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, "&nbsp;|&nbsp");
      }
/*
        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, "&nbsp;|&nbsp");
      }
/*        fprintf(actout, "&nbsp;|&nbsp");*/
#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, "&nbsp;|&nbsp");
      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, "&nbsp;|&nbsp");
      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, "&nbsp]");
      fprintf(actout, "</b></font>");
      fprintf(actout, "</td></tr>\n");
  }
  return 0;
}
Exemplo n.º 3
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);

}