freebsd-ports/mail/vpopmail/files/patch-vpalias.c
Peter Pentchev 0b7394b480 Update to vpopmail-5.4.28.
From the PR - fix the creation of new domains through LDAP.

PR:		131274
Submitted by:	Suzuki <xsuzu@yokohama.riken.jp>
2009-11-26 19:02:19 +00:00

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);
}