diff -ur courier-authlib-0.55.orig/authdaemon.c courier-authlib-0.55/authdaemon.c --- courier-authlib-0.55.orig/authdaemon.c 2004-11-21 12:14:58.000000000 +0900 +++ courier-authlib-0.55/authdaemon.c 2005-04-19 15:03:15.119638892 +0900 @@ -17,6 +17,8 @@ #include #include #include "numlib/numlib.h" +/* for automake homedir */ +#include static const char rcsid[]="$Id: courier-authlib-0.55-automakehomedir.diff,v 1.1.1.1 2005/04/25 16:16:52 nomo Exp $"; @@ -99,6 +101,24 @@ return (1); } + /* automake homedir start */ + struct stat mbuf; + int st; + if (stat(ainfo->homedir, &mbuf) != 0) { + pmkdir(ainfo->homedir, S_IRWXU); + if (stat(ainfo->homedir, &mbuf) == 0) { + fprintf(stderr, "WARN: %s: homedir(%s) not found, now created!!\n", + ainfo->address, ainfo->homedir); + } + else { + fprintf(stderr, "WARN: %s: homedir(%s) not found, create failed!!\n", + ainfo->address, ainfo->homedir); + perror("WARN: error"); + return (1); + } + } + /* automake homedir end */ + if (chdir(ainfo->homedir)) { fprintf(stderr, "WARN: %s: chdir(%s) failed!!\n", @@ -109,3 +129,29 @@ return 0; } + +/* mkdir(2) wrapper to make parent directory */ +int pmkdir(const char *pathname, mode_t mode) +{ + int first, last, retval=0; + char *p; + p = (char *)pathname; + if (p[0] == '/') + ++p; + for (first = 1, last = 0; !last ; ++p) { + if (p[0] == '\0') + last = 1; + else if (p[0] != '/') + continue; + *p = '\0'; + if (!last && p[1] == '\0') + last = 1; + if (first) { + first = 0; + } + retval = mkdir(pathname, mode); + if (!last) + *p = '/'; + } + return (retval); +}