示例#1
0
文件: elock.c 项目: zdndanny/openlava
int
getElock(void)
{
    static char fname[] = "getElock";
    int  force = 0;
    int  retry;
    char *myhostnm, *mastername;
    struct stat statbuf;
    time_t lastmodtime;
    char  first = TRUE;
    char buf[MAXHOSTNAMELEN+8];
    int  lock_fd = -1;

    if (lsb_CheckMode)
        return 0;

    if ((myhostnm = ls_getmyhostname()) == NULL) {
        ls_syslog(LOG_ERR, I18N_FUNC_FAIL_MM, fname, "ls_getmyhostname");
        return MASTER_FATAL;
    }

    sprintf(lockfile, "%s/logdir/%s",
            daemonParams[LSB_SHAREDIR].paramValue,
            EVENT_LOCK_FILE);
access:

    chuser(managerId);
    if (force)
        lock_fd = open(lockfile, O_RDWR | O_CREAT | O_TRUNC, 0644);
    else
        lock_fd = open(lockfile, O_RDWR | O_CREAT | O_EXCL, 0644);

    if (lock_fd >= 0) {
        sprintf(buf, "%s:%d", myhostnm, (int)getpid());
        write(lock_fd, buf, strlen(buf));
        close(lock_fd);
        chuser(batchId);
        ls_syslog(LOG_INFO, "%s: Got lock file", fname);
        gotLock = TRUE;
        return 0;
    } else if (errno == EEXIST) {
        int fd,cc,i,pid;

        fd = open(lockfile, O_RDONLY, 0444);
        chuser(batchId);
        if (fd < 0) {
            ls_syslog(LOG_ERR, "\
%s: Can't open existing lock file <%s>: %m", fname, lockfile);
            return MASTER_FATAL;
        }
示例#2
0
文件: mail.c 项目: JohnLih/openlava
FILE *
smail(char *to, char *tohost)
{
    char fname[] = "smail";
    FILE *fmail;
    int pid;
    int maild[2];
    char toaddr[256];
    char smcmd[500];
    char *sendmailp;
    uid_t userid;

    if (lsb_CheckMode)
        return stderr;

    if ((to == NULL) || (tohost == NULL)) {
        ls_syslog(LOG_ERR, _i18n_msg_get(ls_catd , NL_SETN, 8604,
                                         "%s: Internal error: user name or host name is null"), fname); /* catgets 8604 */
        return stderr;
    }

    if (debug > 2)
        return(stderr);

    if(pipe(maild) < 0) {
        ls_syslog(LOG_ERR, I18N_FUNC_S_FAIL_M, fname, "pipe", to);
        return stderr;
    }
    addr_process(toaddr, to, tohost,
                 daemonParams[LSB_MAILTO].paramValue);
    if (logclass & (LC_TRACE | LC_EXEC))
        ls_syslog(LOG_DEBUG1, "%s: user=%s host=%s toaddr=%s spec=%s",
                  fname, to, tohost,
                  toaddr, daemonParams[LSB_MAILTO].paramValue);

    switch (pid = fork()) {
        case 0:
            if (maild[0] != 0) {
                close(0);
                dup2(maild[0], 0);
                close(maild[0]);
            }
            close(maild[1]);

            sendmailp = daemonParams[LSB_MAILPROG].paramValue;

            userid = geteuid();
            chuser(getuid());
            setuid(userid);

            sprintf(smcmd, "%s -oi -F%s -f%s %s", sendmailp,
                    "'OpenLava'", lsbManager, toaddr);

            execle("/bin/sh", "sh", "-c", smcmd, (char *)0, environ);
            ls_syslog(LOG_ERR, I18N_FUNC_S_FAIL_M, fname, "execle",
                      daemonParams[LSB_MAILPROG].paramValue);
            exit(-1);

        case -1:
            close(maild[1]);
            close(maild[0]);
            ls_syslog(LOG_ERR, I18N_FUNC_S_FAIL_M, fname, "fork", to);
            return stderr;

        default:
            close(maild[0]);
    }
    fmail = fdopen(maild[1], "w");
    if(fmail == NULL) {
        ls_syslog(LOG_ERR, I18N_FUNC_S_FAIL_M, fname, "fdopen", to);
        close(maild[1]);
        return stderr;
    }

    fprintf(fmail, "To: %s\n", toaddr);
    fprintf(fmail, "From: OpenLava <%s>\n", lsbManager);
    fflush(fmail);
    if (ferror(fmail)) {
        fclose(fmail);
        ls_syslog(LOG_ERR, I18N_FUNC_S_S_FAIL_M, fname, "fprintf", "header",
                  to);
        return stderr;
    }
    return fmail;
}