240 |
return exit_code; |
return exit_code; |
241 |
} |
} |
242 |
|
|
|
char * |
|
|
make_progfile_name (char *pattern, char *username) |
|
|
{ |
|
|
char *homedir = NULL; |
|
|
char *p, *q, *startp; |
|
|
char *progfile; |
|
|
int len = 0; |
|
|
|
|
|
for (p = pattern; *p; p++) |
|
|
{ |
|
|
if (*p == '%') |
|
|
switch (*++p) |
|
|
{ |
|
|
case 'u': |
|
|
len += strlen (username); |
|
|
break; |
|
|
case 'h': |
|
|
if (!homedir) |
|
|
{ |
|
|
struct passwd *pwd = mu_getpwnam (username); |
|
|
if (!pwd) |
|
|
return NULL; |
|
|
homedir = pwd->pw_dir; |
|
|
} |
|
|
len += strlen (homedir); |
|
|
break; |
|
|
case '%': |
|
|
len++; |
|
|
break; |
|
|
default: |
|
|
len += 2; |
|
|
} |
|
|
else |
|
|
len++; |
|
|
} |
|
|
|
|
|
progfile = malloc (len + 1); |
|
|
if (!progfile) |
|
|
return NULL; |
|
|
|
|
|
startp = pattern; |
|
|
q = progfile; |
|
|
while (*startp && (p = strchr (startp, '%')) != NULL) |
|
|
{ |
|
|
memcpy (q, startp, p - startp); |
|
|
q += p - startp; |
|
|
switch (*++p) |
|
|
{ |
|
|
case 'u': |
|
|
strcpy (q, username); |
|
|
q += strlen (username); |
|
|
break; |
|
|
case 'h': |
|
|
strcpy (q, homedir); |
|
|
q += strlen (homedir); |
|
|
break; |
|
|
case '%': |
|
|
*q++ = '%'; |
|
|
break; |
|
|
default: |
|
|
*q++ = '%'; |
|
|
*q++ = *p; |
|
|
} |
|
|
startp = p + 1; |
|
|
} |
|
|
if (*startp) |
|
|
{ |
|
|
strcpy (q, startp); |
|
|
q += strlen (startp); |
|
|
} |
|
|
*q = 0; |
|
|
return progfile; |
|
|
} |
|
|
|
|
243 |
int |
int |
244 |
mda (FILE *fp, char *username) |
mda (FILE *fp, char *username) |
245 |
{ |
{ |