void debug_log(int level, const char *str, ...) { va_list v; if ((debug & DEBUG_STDERR) && (level <= (debug & DEBUG_LEVEL_MASK))) { va_start(v, str); vfprintf(stderr, str, v); va_end(v); } if (debug & DEBUG_ASL) { char *line = NULL; if (aslc == NULL) { aslc = asl_open("aslmanager", "syslog", 0); asl_msg_t *msg = asl_msg_new(ASL_TYPE_MSG); asl_msg_set_key_val(msg, ASL_KEY_MSG, "Status Report"); asl_msg_set_key_val(msg, ASL_KEY_LEVEL, ASL_STRING_NOTICE); asl_create_auxiliary_file((asl_object_t)msg, "Status Report", "public.text", &asl_aux_fd); asl_msg_release(msg); } va_start(v, str); vasprintf(&line, str, v); va_end(v); if (line != NULL) write(asl_aux_fd, line, strlen(line)); free(line); } }
/* find all messages that have an ASLExpireTime key */ static uint32_t do_ASLExpireTime_search(asl_store_t *s, asl_search_result_t **out) { asl_search_result_t q, *query, *res; asl_msg_t *qm[1]; uint32_t status; uint64_t mid; qm[0] = asl_msg_new(ASL_TYPE_QUERY); if (qm[0] == NULL) return ASL_STATUS_NO_MEMORY; q.count = 1; q.curr = 0; q.msg = qm; query = &q; if (asl_msg_set_key_val_op(qm[0], ASL_KEY_EXPIRE_TIME, NULL, ASL_QUERY_OP_TRUE) != 0) { asl_msg_release(qm[0]); return ASL_STATUS_NO_MEMORY; } res = NULL; mid = 0; status = asl_store_match(s, query, out, &mid, 0, 0, 1); asl_msg_release(qm[0]); return status; }
int checkpoint(const char *name) { /* send checkpoint message to syslogd */ debug_log(ASL_LEVEL_NOTICE, "Checkpoint module %s\n", (name == NULL) ? "*" : name); if (dryrun != 0) return 0; asl_msg_t *qmsg = asl_msg_new(ASL_TYPE_QUERY); char *tmp = NULL; asl_msg_list_t *res; asprintf(&tmp, "%s checkpoint", (name == NULL) ? "*" : name); asl_msg_set_key_val_op(qmsg, "action", tmp, ASL_QUERY_OP_EQUAL); free(tmp); res = control_query(qmsg); asl_msg_list_release(res); return 0; }