コード例 #1
0
ファイル: vpopbull.c プロジェクト: debdungeon/qint
int main(int argc, char *argv[])
{
 FILE *fsi = NULL;
 FILE *fsx = NULL;
 char *domain;
 char *domain_dir = NULL;
 static struct stat statbuf;
 domain_entry *entry;

  memset(TmpBuf,0,sizeof(TmpBuf));
  memset(MsgBuf,0,sizeof(MsgBuf));

  Verbose = 0;
  DoNothing = 0;

  if ( argc == 1 ) {
    usage();
    vexit(-1);
  }

    if( vauth_open( 1 )) {
        vexiterror( stderr, "Initial open." );
    }

  get_options(argc,argv);

  getcwd(CurDir,sizeof(CurDir));

  if ( EmailFileFlag == 1 ) {
    if ( (fsi = fopen(EmailFile, "r")) == NULL ) {
        fprintf(stderr, "Could not open file %s\n", EmailFile);
        vexit(-1);
    } else {
        /* make sure the file size is not 0 */
        stat(EmailFile, &statbuf);
        if(statbuf.st_size == 0) {
            fprintf(stderr, "Error: %s is empty\n", EmailFile);
            vexit(-1);
        }
        /* check for existing date header */
        while (fgets (TmpBuf, sizeof(TmpBuf), fsi) != NULL) {
            /* check for end of headers (blank line) */
            if (*TmpBuf == '\n') break;

            if (strncasecmp ("Date: ", TmpBuf, 6) == 0) {
                InsertDate = 0;
                break;
            }
        }
        rewind(fsi);
    }
  } else if (! DoNothing) {
    /* require -f [email_file] */
    fprintf(stderr, "Error: email_file not specified\n");
    usage();
    vexit(-1);
  }

  if ( ExcludeFileFlag == 1 ) {
    if ( (fsx = fopen(ExcludeFile, "r")) == NULL ) {
        fprintf(stderr, "Could not open file %s\n", ExcludeFile);
        vexit(-1);
    }
  }

  if (( EmailFile[0] != 0 || DoNothing == 1) && Domain[0] != 0 ) {

    /* Process list of domains */
    domain = strtok(Domain, " ");
    while (domain != NULL ) {
        if((vget_assign(domain, domain_dir, sizeof(domain_dir), NULL, NULL)) != NULL) {
            process_domain(domain,  fsi, fsx );
        } else {
            fprintf(stderr, "Error: domain %s does not exist\n", domain);
        }
        domain = strtok(NULL, " ");
    }
    vexit(0);

  } else if ( (EmailFile[0] != 0 || DoNothing == 1)  && Domain[0] == 0 ) {

    entry = get_domain_entries( "" );
    if (entry==NULL) {
      if( verrori ) {
        printf("Can't get domain entries - %s\n", verror( verrori ));
        vexit(-1);
      } else {
        printf("What now - %s\n", verror( verrori ));
        vexit(0);
      }
    }

    while( entry ) {
      if (strcmp (entry->domain, entry->realdomain) != 0) {
        if (Verbose) {
          fprintf (stderr, "skipping %s (alias of %s)\n", 
                   entry->domain, entry->realdomain);
        }
      } else {
        chdir(entry->path);
        process_domain(entry->realdomain,  fsi, fsx );
      }
    entry = get_domain_entries(NULL);
    }
  }
  return(vexit(0));

}
コード例 #2
0
ファイル: vreorg.c プロジェクト: debdungeon/qint
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);

}
コード例 #3
0
ファイル: user.c プロジェクト: Estella/legacy-qmail-related
modusergo()
{
 char crypted[20]; 
 char *tmpstr;
 int i;
 int ret_code;
 int password_updated = 0;
 struct vqpasswd *vpw=NULL;
 static char box[50];
 static char NewBuf[156];
 int count;
 FILE *fs;
#ifdef SQWEBMAIL_PASS
 uid_t uid;
 gid_t gid;
#endif

  vpw = vauth_getpw(ActionUser, Domain); 

  if (!( AdminType==DOMAIN_ADMIN ||
         (AdminType==USER_ADMIN && strcmp(ActionUser,Username)==0))){
    sprintf(StatusMessage,"%s", get_html_text("142"));
    vclose();
    exit(0);
  }

  if (strlen(Password1)>0 && strlen(Password2)>0 ) {
    if ( strncmp( Password1, Password2, MAX_BUFF ) != 0 ) {
      sprintf(StatusMessage, "%s\n", get_html_text("200"));
      moduser();
      vclose();
      exit(0);
    }
    if (strlen(Password1) > MAX_PW_CLEAR_PASSWD) {
      sprintf(StatusMessage,"%s %s@%s %s", 
        get_html_text("139"), ActionUser, Domain, VA_PASSWD_TOO_LONG );
      moduser();
      vclose();
      exit(0);
    } else if (vpw->pw_gid & NO_PASSWD_CHNG) {
      sprintf(StatusMessage, "%s", get_html_text("140"));
      moduser();
      vclose();
      exit(0);
    } else {
        sprintf(StatusMessage,"%s %s@%s", 
            get_html_text("139"), ActionUser, Domain);
    }

    mkpasswd3(Password1,Crypted, MAX_BUFF);
    vpw->pw_passwd = Crypted;

#ifdef CLEAR_PASS
      vpw->pw_clear_passwd = Password1;
#endif
#ifdef SQWEBMAIL_PASS
      vget_assign(Domain, NULL, 0, &uid, &gid );
      vsqwebmail_pass( vpw->pw_dir, Crypted, uid, gid);
#endif

  }

  GetValue(TmpCGI,Gecos, "gecos=", MAX_BUFF);
  if ( strlen( Gecos ) != 0 ) {
    vpw->pw_gecos = Gecos;
  }
  vauth_setpw(vpw, Domain);

  /* get the value of the cforward radio button */
  GetValue(TmpCGI,box, "cforward=", MAX_BUFF);

  /* if they want to disable everything */
  if ( strcmp(box,"disable") == 0 ) {

    /* unlink the .qmail file */
    if ( vpw == NULL ) vpw = vauth_getpw(ActionUser, Domain); 
    snprintf(NewBuf,156,"%s/.qmail", vpw->pw_dir);
    unlink(NewBuf);

    /* delete any vacation directory */
    snprintf(NewBuf,156,"%s/vacation", vpw->pw_dir);
    vdelfiles(NewBuf);

  /* if they want to forward */
  } else if (strcmp(box,"forward") == 0 ) {

    /* get the value of the foward */
    GetValue(TmpCGI,box, "nforward=", MAX_BUFF);

    /* If nothing was entered, error */
    if ( box[0] == 0 ) {
      sprintf(StatusMessage, "%s\n", get_html_text("215"));
      moduser();
      vclose();
      exit(0);

    /* check it for a valid email address
    } else if ( check_email_addr( box ) == 1 )  {
      sprintf(StatusMessage, "%s\n", get_html_text("148"));
      moduser();
    */
    }

    /* everything looks good, open the file */
    if ( vpw == NULL ) {
      vpw = vauth_getpw(ActionUser, Domain); 
    }
    snprintf(NewBuf,156,"%s/.qmail", vpw->pw_dir);

    fs = fopen(NewBuf,"w+");
    tmpstr = strtok(box," ,;\n");

    count=0;
    while( tmpstr != NULL && count < 2) {
      fprintf(fs,"&%s\n", tmpstr);
      tmpstr = strtok(NULL," ,\n");
      ++count;
    }

    /* if they want to save a copy */
    GetValue(TmpCGI,box, "fsaved=", MAX_BUFF);
    if ( strcmp(box,"on") == 0 ) {
      fprintf(fs,"%s/Maildir/\n", vpw->pw_dir);
    } 
    fclose(fs);

  /* they want vacation */
  } else if (strcmp(box,"vacation") == 0 ) {

    /* get the subject */
    GetValue(TmpCGI,box, "vsubject=", MAX_BUFF);

    /* if no subject, error */
    if ( box[0] == 0 ) {
      sprintf(StatusMessage, "%s\n", get_html_text("216"));
      moduser();
      vclose();
      exit(0);
    }
 
    /* make the vacation directory */
    if ( vpw == NULL ) vpw = vauth_getpw(ActionUser, Domain); 
    snprintf(NewBuf,156,"%s/vacation", vpw->pw_dir);
    mkdir(NewBuf, 448);

    /* open the .qmail file */
    snprintf(NewBuf,156,"%s/.qmail", vpw->pw_dir);
    fs = fopen(NewBuf,"w+");
    fprintf(fs, "| %s/autorespond 86400 3 %s/vacation/message %s/vacation\n",
      AUTORESPOND_BIN, vpw->pw_dir, vpw->pw_dir );

    /* save a copy for the user */
    fprintf(fs,"%s/Maildir/\n", vpw->pw_dir);
    fclose(fs);

    /* set up the message file */
    snprintf(NewBuf,156,"%s/vacation/message", vpw->pw_dir);
    GetValue(TmpCGI,Message, "vmessage=",MAX_BIG_BUFF);

    if ( (fs = fopen(NewBuf, "w")) == NULL ) ack("123", 123);
    fprintf(fs, "From: %s@%s\n", ActionUser,Domain);
    fprintf(fs, "Subject: %s\n\n", box);
    fprintf(fs, "%s", Message);
    fclose(fs);

    /* save the forward for vacation too */
    GetValue(TmpCGI,box,"nforward=", MAX_BUFF);
    snprintf(NewBuf, 156, "%s/.qmail", vpw->pw_dir);
    fs = fopen(NewBuf, "a+");
    tmpstr = strtok(box, " ,;\n");
    count = 0;
    while( tmpstr != NULL && count < 2 ) {
      fprintf(fs, "&%s\n", tmpstr);
      tmpstr = strtok(NULL, " ,;\n");
      ++count;
    }
    fclose(fs);

  } else {
    printf("nothing\n");
  }

  call_hooks(HOOK_MODUSER);
  show_users(Username, Domain, Mytime);
}
コード例 #4
0
ファイル: vmoddomlimits.c プロジェクト: debdungeon/qint
int main(int argc, char *argv[])
{
 int i;
 char OptionString[MAX_BUFF];
 

    if( vauth_open( 1 )) {
        vexiterror( stderr, "Initial open." );
    }

    get_options(argc,argv);
    
    if (EditDefaultLimits || vget_assign(Domain, NULL, 0, NULL, NULL ) != NULL) {    
        if (EditDefaultLimits) {
            if (vlimits_read_limits_file(VLIMITS_DEFAULT_FILE, &limits) != 0) {
                printf ("Failed to read the vlimits.default file.\n");
                vexit(-1);
            }
            if (DeleteLimits) {
          	printf ("Default limits must not be deleted. If you really want to do this,\n");
          	printf ("remove the vlimits.default file.\n");
          	printf ("But be warned: this might stop vpopmail from working!!\n");
          	vexit(-1);
            }
        } else {
            if (vget_limits(Domain,&limits) != 0) {
                printf ("Failed to vget_limits\n");
                vexit(-1);
            }
            if (DeleteLimits) {
                if (vdel_limits(Domain)==0) {
                    printf ("Limits deleted\n");
                    vexit(0);
                } else {
                    printf ("Failed to delete limits\n");
                    vexit(-1);
                }
            }
        }
        if (ShowLimits) {
            memset (OptionString, 0, sizeof(OptionString));
            if (EditDefaultLimits)
                printf("Default limits: %s\n", VLIMITS_DEFAULT_FILE);
            else
                printf("Domain: %s\n", Domain);

            printf("--\n");
            printf("Max Pop Accounts: %d\n", limits.maxpopaccounts);
            printf("Max Aliases: %d\n", limits.maxaliases);
            printf("Max Forwards: %d\n", limits.maxforwards);
            printf("Max Autoresponders: %d\n", limits.maxautoresponders);
            printf("Max Mailinglists: %d\n", limits.maxmailinglists);
            printf("GID Flags:\n");
            if (limits.disable_imap != 0) {
                printf("  NO_IMAP\n");
                strncat(OptionString, "i", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_smtp != 0) {
                printf("  NO_SMTP\n");
                strncat(OptionString, "s", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_pop != 0) {
                printf("  NO_POP\n");
                strncat(OptionString, "p", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_webmail != 0) {
                printf("  NO_WEBMAIL\n");
                strncat(OptionString, "w", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_passwordchanging != 0) {
                printf("  NO_PASSWD_CHNG\n");
                strncat(OptionString, "d", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_relay != 0) {
                printf("  NO_RELAY\n");
                strncat(OptionString, "r", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_dialup != 0) {
                printf("  NO_DIALUP\n");
                strncat(OptionString, "u", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_spamassassin != 0) {
                printf("  NO_SPAMASSASSIN\n");
                strncat(OptionString, "c", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.delete_spam != 0) {
                printf("  DEL_SPAM\n");
                strncat(OptionString, "x", sizeof(OptionString)-strlen(OptionString)-1);
            }
            if (limits.disable_maildrop != 0) {
                printf("  NO_MAILDROP\n");
                strncat(OptionString, "m", sizeof(OptionString)-strlen(OptionString)-1);
            }
            printf("Flags (for commandline): %s\n", OptionString);
            printf("Flags for non postmaster accounts:");
            printf("\n  pop account:            ");
            printf ((limits.perm_account & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_account & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_account & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  alias:                  ");
            printf ((limits.perm_alias & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_alias & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_alias & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  forward:                ");
            printf ((limits.perm_forward & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_forward & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_forward & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  autoresponder:          ");
            printf ((limits.perm_autoresponder & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_autoresponder & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_autoresponder & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  mailinglist:            ");
            printf ((limits.perm_maillist & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_maillist & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_maillist & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  mailinglist users:      ");
            printf ((limits.perm_maillist_users & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_maillist_users & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_maillist_users & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  mailinglist moderators: ");
            printf ((limits.perm_maillist_moderators & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_maillist_moderators & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_maillist_moderators & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  quota:                  ");
            printf ((limits.perm_quota & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_quota & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_quota & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            printf("\n  default quota:          ");
            printf ((limits.perm_defaultquota & VLIMIT_DISABLE_CREATE ? "DENY_CREATE  " :"ALLOW_CREATE ") );
            printf ((limits.perm_defaultquota & VLIMIT_DISABLE_MODIFY ? "DENY_MODIFY  " :"ALLOW_MODIFY ") );
            printf ((limits.perm_defaultquota & VLIMIT_DISABLE_DELETE ? "DENY_DELETE  " :"ALLOW_DELETE ") );
            
            printf("\n");
            printf("Domain Quota: %d MB\n", limits.diskquota);
            printf("Default User Quota: %d bytes\n", limits.defaultquota);
            printf("Max Domain Messages: %d\n", limits.maxmsgcount);
            printf("Default Max Messages per User: %d\n", limits.defaultmaxmsgcount);
            return(vexit(0));
        }
                
        if (MaxPopAccounts[0] != 0) {
            limits.maxpopaccounts = atoi(MaxPopAccounts);
        }
        if (MaxAliases[0] != 0) {
            limits.maxaliases = atoi(MaxAliases);
        }
        if (MaxForwards[0] != 0) {
            limits.maxforwards = atoi(MaxForwards);
        }
        if (MaxAutoresponders[0] != 0) {
            limits.maxautoresponders = atoi(MaxAutoresponders);
        }
        if (MaxMailinglists[0] != 0) {
            limits.maxmailinglists = atoi(MaxMailinglists);
        }
        
        /* quota & message count limits */
        if (DomainQuota[0] != 0) {
            limits.diskquota = atoi(DomainQuota);
        }
        if (DomainMaxMsgCount[0] != 0) {
            limits.maxmsgcount = atoi(DomainMaxMsgCount);
        }
        if (DefaultUserQuota[0] != 0) {
            limits.defaultquota = atoi(format_maildirquota(DefaultUserQuota));
        }
        if (DefaultUserMaxMsgCount[0] != 0) {
            limits.defaultmaxmsgcount = atoi(DefaultUserMaxMsgCount);
        }
        
        if (GidFlag == 1) {
            GidFlag = 0;
            limits.disable_dialup = 0;
            limits.disable_passwordchanging = 0;
            limits.disable_pop = 0;
            limits.disable_smtp = 0;
            limits.disable_webmail = 0;
            limits.disable_imap = 0;
            limits.disable_relay = 0;
            limits.disable_spamassassin = 0;
            limits.delete_spam = 0;
            limits.disable_maildrop = 0;
            for (i=0; i<(int)strlen(GidFlagString); i++) {
                switch(GidFlagString[i]) {
                    case 'u': limits.disable_dialup = 1; break;
                    case 'd': limits.disable_passwordchanging = 1; break;
                    case 'p': limits.disable_pop = 1; break;
                    case 's': limits.disable_smtp = 1; break;
                    case 'w': limits.disable_webmail = 1; break;
                    case 'i': limits.disable_imap = 1; break;
                    case 'r': limits.disable_relay = 1; break;
                    case 'c': limits.disable_spamassassin = 1; break;
                    case 'x': limits.delete_spam = 1; break;
                    case 'm': limits.disable_maildrop = 1; break;
                }
            }
        }
        if (PermAccountFlag == 1) {
            limits.perm_account=0;
            for (i=0; i<(int)strlen(PermAccountFlagString); i++) {
                switch(PermAccountFlagString[i]) {
                    case 'a': limits.perm_account|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_account|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_account|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_account|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermAliasFlag == 1) {
            limits.perm_alias=0;
            for (i=0; i<(int)strlen(PermAliasFlagString); i++) {
                switch(PermAliasFlagString[i]) {
                    case 'a': limits.perm_alias|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_alias|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_alias|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_alias|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermForwardFlag == 1) {
            limits.perm_forward=0;
            for (i=0; i<(int)strlen(PermForwardFlagString); i++) {
                switch(PermForwardFlagString[i]) {
                    case 'a': limits.perm_forward|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_forward|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_forward|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_forward|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermAutoresponderFlag == 1) {
            limits.perm_autoresponder=0;
            for (i=0; i<(int)strlen(PermAutoresponderFlagString); i++) {
                switch(PermAutoresponderFlagString[i]) {
                    case 'a': limits.perm_autoresponder|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_autoresponder|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_autoresponder|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_autoresponder|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermMaillistFlag == 1) {
            limits.perm_maillist=0;
            for (i=0; i<(int)strlen(PermMaillistFlagString); i++) {
                switch(PermMaillistFlagString[i]) {
                    case 'a': limits.perm_maillist|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_maillist|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_maillist|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_maillist|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermMaillistUsersFlag == 1) {
            limits.perm_maillist_users=0;
            for (i=0; i<(int)strlen(PermMaillistUsersFlagString); i++) {
                switch(PermMaillistUsersFlagString[i]) {
                    case 'a': limits.perm_maillist_users|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_maillist_users|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_maillist_users|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_maillist_users|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermMaillistModeratorsFlag == 1) {
            limits.perm_maillist_moderators=0;
            for (i=0; i<(int)strlen(PermMaillistModeratorsFlagString); i++) {
                switch(PermMaillistModeratorsFlagString[i]) {
                    case 'a': limits.perm_maillist_moderators|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_maillist_moderators|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_maillist_moderators|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_maillist_moderators|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermQuotaFlag == 1) {
            limits.perm_quota=0;
            for (i=0; i<(int)strlen(PermQuotaFlagString); i++) {
                switch(PermQuotaFlagString[i]) {
                    case 'a': limits.perm_quota|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_quota|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_quota|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_quota|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (PermDefaultQuotaFlag == 1) {
            limits.perm_defaultquota=0;
            for (i=0; i<(int)strlen(PermDefaultQuotaFlagString); i++) {
                switch(PermDefaultQuotaFlagString[i]) {
                    case 'a': limits.perm_defaultquota|=VLIMIT_DISABLE_ALL; break;
                    case 'c': limits.perm_defaultquota|=VLIMIT_DISABLE_CREATE; break;
                    case 'm': limits.perm_defaultquota|=VLIMIT_DISABLE_MODIFY; break;
                    case 'd': limits.perm_defaultquota|=VLIMIT_DISABLE_DELETE; break;
                }
            }
        }
        if (EditDefaultLimits) {
            if (vlimits_write_limits_file(VLIMITS_DEFAULT_FILE, &limits)) {
            	printf ("Failed to write vlimits.default file");
            	return (vexit(-1));
            }
        } else {
            if (vset_limits(Domain,&limits) != 0) {
                printf ("Failed to vset_limits\n");
                return (vexit(-1));
            }
        }
    }
    
    return(vexit(0));

}