%% options copyright owner = Dirk Krause copyright year = 2012-2014 license = bsd %% module #include "printqd.h" $!trace-include #if DK3_CHAR_SIZE == 1 #if DK3_HAVE_STRUCT_SOCKADDR_UN #if DK3_HAVE_SIGSET #if DK3_HAVE_GETPWNAM && DK3_HAVE_GETGRNAM void pqdtool_job_init_first(pqd_job_t *job) { job->app = NULL; job->lmsg = NULL; job->cmsg = NULL; job->tmpn = NULL; job->db = NULL; job->p_i = NULL; job->p_o = NULL; job->sz_i = 0; job->sz_o = 0; job->lso = INVALID_SOCKET; job->frun = 0; job->fres = 0; job->rqt = 0; } void pqdtool_job_cleanup_last(pqd_job_t *job) { if(job->app) { dk3app_close(job->app); job->app = NULL; } } int pqdtool_mkdir_for( char const *fn, mode_t mo, uid_t uid, gid_t gid, pqd_job_t *job ) { char bu[DK3_MAX_PATH]; /* Copy of file name. */ struct stat stb; /* Used to get file information. */ char *p1; /* Rightmost separator. */ char *p2; /* Current separator. */ mode_t oldumask; /* Umask at start. */ int back = 0; $? "+ pqdtool_mkdir_for \"%s\"", TR_STR(fn) if(fn) { if(strlen(fn) < sizeof(bu)) { strcpy(bu, fn); oldumask = umask(0); p1 = dk3str_c8_rchr(bu, '/'); if(p1) { *p1 = '\0'; $? ". final dir = \"%s\"", bu back = 1; p2 = bu; do { p2 = dk3str_chr(p2, '/'); if(p2) { *p2 = '\0'; } if(0 < strlen(bu)) { $? ". dir = \"%s\"", bu if(0 != stat(bu, &stb)) { $? ". name does not yet exist" if(0 == mkdir(bu, mo)) { if((uid) || (gid)) { if(0 != chown(bu, uid, gid)) { back = 0; if(!(p2)) { /* Report error for the final directory */ dk3app_log_3(job->app,DK3_LL_ERROR,job->lmsg,14,15,bu); } } } } else { $? "! mkdir failed" back = 0; if(!(p2)) { /* Report error for the final directory */ dk3app_log_3(job->app,DK3_LL_ERROR,job->lmsg,16,17,bu); } } } else { $? ". name already exists" } } if(p2) { *(p2++) = '/'; } } while(p2); } umask(oldumask); } } $? "- pqdtool_mkdir_for %d", back return back; } #endif #endif #endif #endif