0b7394b480
From the PR - fix the creation of new domains through LDAP. PR: 131274 Submitted by: Suzuki <xsuzu@yokohama.riken.jp>
121 lines
3.4 KiB
C
121 lines
3.4 KiB
C
Description: Honor the correct limits.
|
|
Forwarded: no
|
|
Author: Peter Pentchev <roam@FreeBSD.org>
|
|
Last-Update: 2009-11-26
|
|
|
|
--- a/vpalias.c
|
|
+++ b/vpalias.c
|
|
@@ -30,11 +30,11 @@
|
|
|
|
/* Globals */
|
|
static char alias_line[MAX_ALIAS_LINE];
|
|
-static char Dir[156];
|
|
+static char Dir[MAX_PW_DIR + 8 + MAX_PW_NAME + 1];
|
|
static int max_names, num_names, cur_name;
|
|
static char **names = NULL;
|
|
|
|
-#define MAX_FILE_SIZE 156
|
|
+#define MAX_FILE_SIZE MAX_PW_DIR
|
|
static FILE *alias_fs = NULL;
|
|
static char mydomain[MAX_FILE_SIZE];
|
|
|
|
@@ -46,7 +46,7 @@
|
|
char *valias_select( char *alias, char *domain )
|
|
{
|
|
char *tmpstr;
|
|
- static char tmpbuf[156];
|
|
+ static char tmpbuf[MAX_PW_DIR];
|
|
uid_t uid;
|
|
gid_t gid;
|
|
int i;
|
|
@@ -77,7 +77,7 @@
|
|
alias_fs = NULL;
|
|
}
|
|
|
|
- if ((tmpstr=vget_assign(domain,alias_line,MAX_ALIAS_LINE,&uid,&gid))==NULL) {
|
|
+ if ((tmpstr=vget_assign(domain,Dir,MAX_PW_DIR+1,&uid,&gid))==NULL) {
|
|
printf("invalid domain, not in qmail assign file\n");
|
|
return(NULL);
|
|
}
|
|
@@ -115,7 +115,6 @@
|
|
{
|
|
int i;
|
|
char *tmpstr;
|
|
- char Dir[156];
|
|
char *p;
|
|
uid_t uid;
|
|
gid_t gid;
|
|
@@ -128,7 +127,7 @@
|
|
if ( strlen(domain) > MAX_PW_DOMAIN ) return(VA_DOMAIN_NAME_TOO_LONG);
|
|
if ( strlen(alias_line) >= MAX_ALIAS_LINE ) return(VA_ALIAS_LINE_TOO_LONG);
|
|
|
|
- if ((tmpstr = vget_assign(domain, Dir, sizeof(Dir), &uid, &gid )) == NULL) {
|
|
+ if ((tmpstr = vget_assign(domain, Dir, MAX_PW_DIR+1, &uid, &gid )) == NULL) {
|
|
printf("invalid domain, not in qmail assign file\n");
|
|
return(-1);
|
|
}
|
|
@@ -164,7 +163,6 @@
|
|
{
|
|
int i;
|
|
char *tmpstr;
|
|
- char Dir[156];
|
|
char *p;
|
|
char LineBuf[512];
|
|
char *DirNew;
|
|
@@ -179,7 +177,7 @@
|
|
if ( strlen(domain) > MAX_PW_DOMAIN ) return(VA_DOMAIN_NAME_TOO_LONG);
|
|
if ( strlen(alias_line) >= MAX_ALIAS_LINE ) return(VA_ALIAS_LINE_TOO_LONG);
|
|
|
|
- if ((tmpstr = vget_assign(domain, Dir, sizeof(Dir), &uid, &gid )) == NULL) {
|
|
+ if ((tmpstr = vget_assign(domain, Dir, MAX_PW_DIR+1, &uid, &gid )) == NULL) {
|
|
printf("invalid domain, not in qmail assign file\n");
|
|
return(-1);
|
|
}
|
|
@@ -191,7 +189,11 @@
|
|
Dir[i++] = (*p == '.' ? ':' : *p);
|
|
Dir[i] = '\0';
|
|
|
|
- DirNew = strcat(strcpy(malloc(8 + sizeof(Dir) + 4), Dir), ".new");
|
|
+ i = strlen(Dir) + 5;
|
|
+ DirNew = malloc(i);
|
|
+ if (DirNew == NULL)
|
|
+ return(-1);
|
|
+ snprintf(DirNew, i, "%s.new", Dir);
|
|
|
|
if ( (fr = fopen(Dir, "r")) == NULL ) {
|
|
free(DirNew);
|
|
@@ -230,7 +232,6 @@
|
|
int valias_delete( char *alias, char *domain)
|
|
{
|
|
char *tmpstr;
|
|
- char Dir[156];
|
|
char *p;
|
|
uid_t uid;
|
|
gid_t gid;
|
|
@@ -241,7 +242,7 @@
|
|
if ( strlen(alias) > MAX_PW_NAME ) return(VA_USER_NAME_TOO_LONG);
|
|
if ( strlen(domain) > MAX_PW_DOMAIN ) return(VA_DOMAIN_NAME_TOO_LONG);
|
|
|
|
- if ((tmpstr = vget_assign(domain, Dir, 156, &uid, &gid )) == NULL) {
|
|
+ if ((tmpstr = vget_assign(domain, Dir, MAX_PW_DIR+1, &uid, &gid )) == NULL) {
|
|
printf("invalid domain, not in qmail assign file\n");
|
|
return(-1);
|
|
}
|
|
@@ -295,7 +296,7 @@
|
|
alias_fs = NULL;
|
|
}
|
|
|
|
- if ((vget_assign(domain, Dir, sizeof(Dir), &uid, &gid )) == NULL) {
|
|
+ if ((vget_assign(domain, Dir, MAX_PW_DIR+1, &uid, &gid )) == NULL) {
|
|
printf("invalid domain, not in qmail assign file\n");
|
|
return(NULL);
|
|
}
|
|
@@ -441,7 +442,7 @@
|
|
alias_fs = NULL;
|
|
}
|
|
|
|
- if ((vget_assign(domain, Dir, sizeof(Dir), &uid, &gid )) == NULL) {
|
|
+ if ((vget_assign(domain, Dir, MAX_PW_DIR+1, &uid, &gid )) == NULL) {
|
|
printf("invalid domain, not in qmail assign file\n");
|
|
return(NULL);
|
|
}
|