int main(int argc, char *argv[]) { int failed; sxc_client_t *sx = server_init(NULL, NULL, NULL, 0, argc, argv); #ifdef ABS_BUILDDIR /* chdir so that tests that use execve() can find * the executables */ if (chdir(ABS_BUILDDIR) == -1) { fprintf(stderr,"chdir failed on %s: %s", ABS_BUILDDIR, strerror(errno)); return 2; } #endif sr = srunner_create(NULL); if (srunner_fork_status(sr)) skip_dietests = 1; srunner_add_suite(sr, test_suite()); srunner_run_all(sr, CK_NORMAL); failed = srunner_ntests_failed(sr); srunner_free(sr); server_done(&sx); return !failed ? EXIT_SUCCESS : EXIT_FAILURE; }
int main(int argc, char *argv[]) { gboolean verbose = FALSE; GOptionEntry entries[] = { { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, N_("display information useful for debugging"), NULL }, {NULL, 0, 0, 0, NULL, NULL, NULL} }; LassiServer ls; GError *error = NULL; /* workaround bug-buddy using our logging handler in an unsave way * http://github.com/herzi/mango-lassi/issues/#issue/1 * and * http://bugs.gnome.org/622068 */ g_setenv ("GNOME_DISABLE_CRASH_DIALOG", "1", TRUE); /* Initialize the i18n stuff */ bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); g_log_set_default_handler (log_handler, &verbose); if (!gtk_init_with_args(&argc, &argv, NULL, entries, NULL, &error)) { g_warning ("error while parsing the command line arguments%s%s", error ? ": " : "", error ? error->message : ""); g_clear_error (&error); return 1; } /* FIXME: try setting the application name from the startup information */ // g_get_application_name (); gtk_window_set_default_icon_name (g_get_prgname ()); memset(&ls, 0, sizeof(ls)); if (server_init(&ls) < 0) goto fail; gtk_main(); fail: server_done(&ls); return 0; }
// // Called by the obex-layer when some event occurs. // void obex_event(obex_t *handle, obex_object_t *object, int mode, int event, int obex_cmd, int obex_rsp) { switch (event) { case OBEX_EV_PROGRESS: printf("Made some progress...\n"); break; case OBEX_EV_ABORT: printf("Request aborted!\n"); break; case OBEX_EV_REQDONE: if(mode == OBEX_MODE_CLIENT) { client_done(handle, object, obex_cmd, obex_rsp); } else { server_done(handle, object, obex_cmd, obex_rsp); } break; case OBEX_EV_REQHINT: /* Accept any command. Not rellay good, but this is a test-program :) */ OBEX_ObjectSetRsp(object, OBEX_RSP_CONTINUE, OBEX_RSP_SUCCESS); break; case OBEX_EV_REQ: server_request(handle, object, event, obex_cmd); break; case OBEX_EV_LINKERR: OBEX_TransportDisconnect(handle); printf("Link broken!\n"); break; case OBEX_EV_STREAMEMPTY: fillstream(handle, object); break; default: printf("Unknown event %02x!\n", event); break; } }
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { Server s; StdoutStream *stream; int v; if (size == 0 || size > 65536) return 0; if (!getenv("SYSTEMD_LOG_LEVEL")) log_set_max_level(LOG_CRIT); assert_se(socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0, stream_fds) >= 0); dummy_server_init(&s, NULL, 0); assert_se(stdout_stream_install(&s, stream_fds[0], &stream) >= 0); assert_se(write(stream_fds[1], data, size) == (ssize_t) size); while (ioctl(stream_fds[0], SIOCINQ, &v) == 0 && v) sd_event_run(s.event, (uint64_t) -1); if (s.n_stdout_streams) stdout_stream_destroy(stream); server_done(&s); stream_fds[1] = safe_close(stream_fds[1]); return 0; }
int main(int argc, char *argv[]) { Server server; int r; if (argc > 1) { log_error("This program does not take arguments."); return EXIT_FAILURE; } log_set_target(LOG_TARGET_SAFE); log_set_facility(LOG_SYSLOG); log_parse_environment(); log_open(); umask(0022); sigbus_install(); r = server_init(&server); if (r < 0) goto finish; server_vacuum(&server, false); server_flush_to_var(&server, true); server_flush_dev_kmsg(&server); log_debug("systemd-journald running as pid "PID_FMT, getpid_cached()); server_driver_message(&server, 0, "MESSAGE_ID=" SD_MESSAGE_JOURNAL_START_STR, LOG_MESSAGE("Journal started"), NULL); /* Make sure to send the usage message *after* flushing the * journal so entries from the runtime journals are ordered * before this message. See #4190 for some details. */ server_space_usage_message(&server, NULL); for (;;) { usec_t t = USEC_INFINITY, n; r = sd_event_get_state(server.event); if (r < 0) goto finish; if (r == SD_EVENT_FINISHED) break; n = now(CLOCK_REALTIME); if (server.max_retention_usec > 0 && server.oldest_file_usec > 0) { /* The retention time is reached, so let's vacuum! */ if (server.oldest_file_usec + server.max_retention_usec < n) { log_info("Retention time reached."); server_rotate(&server); server_vacuum(&server, false); continue; } /* Calculate when to rotate the next time */ t = server.oldest_file_usec + server.max_retention_usec - n; } #if HAVE_GCRYPT if (server.system_journal) { usec_t u; if (journal_file_next_evolve_usec(server.system_journal, &u)) { if (n >= u) t = 0; else t = MIN(t, u - n); } } #endif r = sd_event_run(server.event, t); if (r < 0) { log_error_errno(r, "Failed to run event loop: %m"); goto finish; } server_maybe_append_tags(&server); server_maybe_warn_forward_syslog_missed(&server); } log_debug("systemd-journald stopped as pid "PID_FMT, getpid_cached()); server_driver_message(&server, 0, "MESSAGE_ID=" SD_MESSAGE_JOURNAL_STOP_STR, LOG_MESSAGE("Journal stopped"), NULL); finish: server_done(&server); return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; }
int main(int ac, char *av[]) { WORD version = MAKEWORD(2, 0) ; WSADATA wsaData ; /* * check 1st option */ if (ac >= 2) { if (strcmp(av[1], "-service") == 0) { serviceRun(ac, av) ; return 0 ; } if (strcmp(av[1], "-install") == 0) { serviceInstall(ac, av) ; return 0 ; } if (strcmp(av[1], "-remove") == 0) { serviceRemove(ac, av) ; return 0 ; } } /* * otherwise run as normal application */ if (config_load(ac, av) != TRUE) { printf("cannot load configration\n") ; return 1 ; } log_configure(ac, av) ; if (WSAStartup(version, &wsaData) != 0) { printf("cannot startup WinSock\n") ; return FALSE ; } if (server_init(ac, av) != TRUE) { printf("cannot initialize server\n") ; WSACleanup() ; return 1 ; } signal(SIGINT, handler) ; signal(SIGTERM, handler) ; signal(SIGBREAK, handler) ; printf("Service Started\n") ; server_loop() ; printf("Service Termiating...\n") ; server_done() ; printf("Service Terminated\n") ; WSACleanup() ; log_terminate() ; return 0 ; }
int main(int argc, char **argv) { sxi_hdist_t *hdist = NULL, *hdist2 = NULL; unsigned int i, j, cfg_len; sx_uuid_t uuid; const sx_nodelist_t *nodelist; const sx_node_t *node; const void *cfg; int ret = 1; sxc_client_t *sx = server_init(NULL, NULL, NULL, 0, argc, argv); if(argc == 2 && !strcmp(argv[1], "--debug")) { log_setminlevel(sx, SX_LOG_DEBUG); dbg = 1; } if(!(hdist = sxi_hdist_new(1337, MAXBUILDS, NULL))) { CRIT("Can't build hdist"); return 1; } for(i = 0; i < 5; i++) { uuid_from_string(&uuid, nodes[i].uuid); if(sxi_hdist_addnode(hdist, &uuid, nodes[i].addr, nodes[i].int_addr, nodes[i].capacity)) { CRIT("addnode failed (1)"); goto main_err; } } if(sxi_hdist_build(hdist) != OK) { CRIT("Can't build distribution model (1)"); goto main_err; } if(sxi_hdist_newbuild(hdist) != OK) { CRIT("Can't create new build (1)"); goto main_err; } /* get nodes from build 1 (previous 0) */ nodelist = sxi_hdist_nodelist(hdist, 1); if(!nodelist) { CRIT("sxi_hdist_nodelist failed"); goto main_err; } DEBUG("Re-adding %d nodes from previous build", sx_nodelist_count(nodelist)); for(i = 0; i < sx_nodelist_count(nodelist); i++) { node = sx_nodelist_get(nodelist, i); if(sxi_hdist_addnode(hdist, sx_node_uuid(node), sx_node_addr(node), sx_node_internal_addr(node), sx_node_capacity(node))) { CRIT("addnode failed (2)"); goto main_err; } } DEBUG("Adding 3 new nodes"); /* add 3 new nodes */ for(i = 5; i < 8; i++) { uuid_from_string(&uuid, nodes[i].uuid); if(sxi_hdist_addnode(hdist, &uuid, nodes[i].addr, nodes[i].int_addr, nodes[i].capacity)) { CRIT("addnode failed (3)"); goto main_err; } } if(sxi_hdist_build(hdist) != OK) { CRIT("Can't build distribution model (2)"); goto main_err; } DEBUG("Number of builds: %d", sxi_hdist_buildcnt(hdist)); DEBUG("Assuming the cluster was rebalanced"); if(sxi_hdist_rebalanced(hdist) != OK) { CRIT("sxi_hdist_rebalanced failed"); goto main_err; } DEBUG("Creating new build"); if(sxi_hdist_newbuild(hdist) != OK) { CRIT("Can't create new build (2)"); goto main_err; } /* get nodes from build 1 (previous 0) */ nodelist = sxi_hdist_nodelist(hdist, 1); if(!nodelist) { CRIT("sxi_hdist_nodelist failed"); goto main_err; } DEBUG("Re-adding %d nodes from previous build", sx_nodelist_count(nodelist)); for(i = 0; i < sx_nodelist_count(nodelist); i++) { node = sx_nodelist_get(nodelist, i); if(sxi_hdist_addnode(hdist, sx_node_uuid(node), sx_node_addr(node), sx_node_internal_addr(node), sx_node_capacity(node))) { CRIT("addnode failed (4)"); goto main_err; } } DEBUG("Adding 2 new nodes"); /* add 2 new nodes */ for(i = 8; i < 10; i++) { uuid_from_string(&uuid, nodes[i].uuid); if(sxi_hdist_addnode(hdist, &uuid, nodes[i].addr, nodes[i].int_addr, nodes[i].capacity)) { CRIT("addnode failed (4)"); goto main_err; } } if(sxi_hdist_build(hdist) != OK) { CRIT("Can't build distribution model (3)"); goto main_err; } DEBUG("Number of builds: %d", sxi_hdist_buildcnt(hdist)); if(dbg) { print_nodes(hdist, 0); print_nodes(hdist, 1); } if((uint64_t) FINAL_CHECKSUM != sxi_hdist_checksum(hdist)) { CRIT("Unexpected checksum: %lld", (long long int) sxi_hdist_checksum(hdist)); goto main_err; } DEBUG("*** Creating exact copy of HDIST based on existing config ***"); if(sxi_hdist_get_cfg(hdist, &cfg, &cfg_len)) { CRIT("Can't get config"); goto main_err; } else { DEBUG("Compressed config size: %u", (unsigned int) cfg_len); } if(!(hdist2 = sxi_hdist_from_cfg(cfg, cfg_len))) { CRIT("Can't build HDIST from config"); goto main_err; } if(!sxi_hdist_same_origin(hdist, hdist2)) { CRIT("UUIDs are different for old and new model"); goto main_err; } if(sxi_hdist_checksum(hdist) != sxi_hdist_checksum(hdist2)) { CRIT("Checksums don't match for original and copied build"); goto main_err; } else { DEBUG("Models' checksums OK"); } /* test bidx 0 (10 nodes) */ for(i = 0; i < sizeof(hashes) / 8; i++) for(j = 1; j <= 10; j++) if(locate_cmp(hdist, hdist2, hashes[i], j, 0)) goto main_err; /* test bidx 1 (8 nodes) */ for(i = 0; i < sizeof(hashes) / 8; i++) for(j = 1; j <= 8; j++) if(locate_cmp(hdist, hdist2, hashes[i], j, 1)) goto main_err; ret = 0; main_err: sxi_hdist_free(hdist); sxi_hdist_free(hdist2); server_done(&sx); return ret; }
int main(int argc, char *argv[]) { Server server; int r = EXIT_FAILURE, n; if (getppid() != 1) { log_error("This program should be invoked by init only."); return EXIT_FAILURE; } if (argc > 1) { log_error("This program does not take arguments."); return EXIT_FAILURE; } log_set_target(LOG_TARGET_AUTO); log_parse_environment(); log_open(); umask(0022); n = sd_listen_fds(true); if (n < 0) { log_error_errno(r, "Failed to read listening file descriptors from environment: %m"); return EXIT_FAILURE; } if (n <= 0 || n > SERVER_FD_MAX) { log_error("No or too many file descriptors passed."); return EXIT_FAILURE; } if (server_init(&server, (unsigned) n) < 0) return EXIT_FAILURE; log_debug("systemd-initctl running as pid "PID_FMT, getpid()); sd_notify(false, "READY=1\n" "STATUS=Processing requests..."); while (!server.quit) { struct epoll_event event; int k; k = epoll_wait(server.epoll_fd, &event, 1, TIMEOUT_MSEC); if (k < 0) { if (errno == EINTR) continue; log_error_errno(errno, "epoll_wait() failed: %m"); goto fail; } if (k <= 0) break; if (process_event(&server, &event) < 0) goto fail; } r = EXIT_SUCCESS; log_debug("systemd-initctl stopped as pid "PID_FMT, getpid()); fail: sd_notify(false, "STOPPING=1\n" "STATUS=Shutting down..."); server_done(&server); return r; }
static int server_init(Server *s, unsigned n_sockets) { int r; unsigned i; assert(s); assert(n_sockets > 0); zero(*s); s->epoll_fd = epoll_create1(EPOLL_CLOEXEC); if (s->epoll_fd < 0) { r = log_error_errno(errno, "Failed to create epoll object: %m"); goto fail; } for (i = 0; i < n_sockets; i++) { struct epoll_event ev; Fifo *f; int fd; fd = SD_LISTEN_FDS_START+i; r = sd_is_fifo(fd, NULL); if (r < 0) { log_error_errno(r, "Failed to determine file descriptor type: %m"); goto fail; } if (!r) { log_error("Wrong file descriptor type."); r = -EINVAL; goto fail; } f = new0(Fifo, 1); if (!f) { r = -ENOMEM; log_error_errno(errno, "Failed to create fifo object: %m"); goto fail; } f->fd = -1; zero(ev); ev.events = EPOLLIN; ev.data.ptr = f; if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, fd, &ev) < 0) { r = -errno; fifo_free(f); log_error_errno(errno, "Failed to add fifo fd to epoll object: %m"); goto fail; } f->fd = fd; LIST_PREPEND(fifo, s->fifos, f); f->server = s; s->n_fifos++; } r = bus_connect_system_systemd(&s->bus); if (r < 0) { log_error_errno(r, "Failed to get D-Bus connection: %m"); r = -EIO; goto fail; } return 0; fail: server_done(s); return r; }
int main(int argc, char *argv[]) { Server server; int r; /* if (getppid() != 1) { */ /* log_error("This program should be invoked by init only."); */ /* return EXIT_FAILURE; */ /* } */ if (argc > 1) { log_error("This program does not take arguments."); return EXIT_FAILURE; } log_set_target(LOG_TARGET_SAFE); log_set_facility(LOG_SYSLOG); log_parse_environment(); log_open(); umask(0022); r = server_init(&server); if (r < 0) goto finish; server_vacuum(&server); server_flush_to_var(&server); server_flush_dev_kmsg(&server); log_debug("systemd-journald running as pid %lu", (unsigned long) getpid()); server_driver_message(&server, SD_MESSAGE_JOURNAL_START, "Journal started"); sd_notify(false, "READY=1\n" "STATUS=Processing requests..."); for (;;) { struct epoll_event event; int t = -1; usec_t n; n = now(CLOCK_REALTIME); if (server.max_retention_usec > 0 && server.oldest_file_usec > 0) { /* The retention time is reached, so let's vacuum! */ if (server.oldest_file_usec + server.max_retention_usec < n) { log_info("Retention time reached."); server_rotate(&server); server_vacuum(&server); continue; } /* Calculate when to rotate the next time */ t = (int) ((server.oldest_file_usec + server.max_retention_usec - n + USEC_PER_MSEC - 1) / USEC_PER_MSEC); log_info("Sleeping for %i ms", t); } #ifdef HAVE_GCRYPT if (server.system_journal) { usec_t u; if (journal_file_next_evolve_usec(server.system_journal, &u)) { if (n >= u) t = 0; else t = MIN(t, (int) ((u - n + USEC_PER_MSEC - 1) / USEC_PER_MSEC)); } } #endif r = epoll_wait(server.epoll_fd, &event, 1, t); if (r < 0) { if (errno == EINTR) continue; log_error("epoll_wait() failed: %m"); r = -errno; goto finish; } if (r > 0) { r = process_event(&server, &event); if (r < 0) goto finish; else if (r == 0) break; } server_maybe_append_tags(&server); server_maybe_warn_forward_syslog_missed(&server); } log_debug("systemd-journald stopped as pid %lu", (unsigned long) getpid()); server_driver_message(&server, SD_MESSAGE_JOURNAL_STOP, "Journal stopped"); finish: sd_notify(false, "STATUS=Shutting down..."); server_done(&server); return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; }
static int server_init(Server *s, unsigned n_sockets) { int r; unsigned i; struct epoll_event ev; sigset_t mask; assert(s); assert(n_sockets > 0); zero(*s); s->kmsg_fd = s->signal_fd = -1; if ((s->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0) { r = -errno; log_error("Failed to create epoll object: %s", strerror(errno)); goto fail; } if (!(s->syslog_fds = fdset_new())) { r = -ENOMEM; log_error("Failed to allocate file descriptor set: %s", strerror(errno)); goto fail; } for (i = 0; i < n_sockets; i++) { int fd, one = 1; fd = SD_LISTEN_FDS_START+i; if ((r = sd_is_socket(fd, AF_UNSPEC, SOCK_DGRAM, -1)) < 0) { log_error("Failed to determine file descriptor type: %s", strerror(-r)); goto fail; } if (!r) { log_error("Wrong file descriptor type."); r = -EINVAL; goto fail; } if (setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one)) < 0) log_error("SO_PASSCRED failed: %m"); zero(ev); ev.events = EPOLLIN; ev.data.fd = fd; if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, fd, &ev) < 0) { r = -errno; log_error("Failed to add server fd to epoll object: %s", strerror(errno)); goto fail; } if ((r = fdset_put(s->syslog_fds, fd)) < 0) { log_error("Failed to store file descriptor in set: %s", strerror(-r)); goto fail; } } if ((s->kmsg_fd = open("/dev/kmsg", O_WRONLY|O_NOCTTY|O_CLOEXEC)) < 0) { log_error("Failed to open /dev/kmsg for logging: %m"); return -errno; } assert_se(sigemptyset(&mask) == 0); sigset_add_many(&mask, SIGINT, SIGTERM, -1); assert_se(sigprocmask(SIG_SETMASK, &mask, NULL) == 0); if ((s->signal_fd = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC)) < 0) { log_error("signalfd(): %m"); return -errno; } zero(ev); ev.events = EPOLLIN; ev.data.fd = s->signal_fd; if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, s->signal_fd, &ev) < 0) { log_error("epoll_ctl(): %m"); return -errno; } return 0; fail: server_done(s); return r; }
int main(int argc, char *argv[]) { Server server; int r = EXIT_FAILURE, n; if (getppid() != 1) { log_error("This program should be invoked by init only."); return EXIT_FAILURE; } if (argc > 1) { log_error("This program does not take arguments."); return EXIT_FAILURE; } log_set_target(LOG_TARGET_KMSG); log_parse_environment(); log_open(); if ((n = sd_listen_fds(true)) < 0) { log_error("Failed to read listening file descriptors from environment: %s", strerror(-r)); return EXIT_FAILURE; } if (n <= 0 || n > SERVER_FD_MAX) { log_error("No or too many file descriptors passed."); return EXIT_FAILURE; } if (server_init(&server, (unsigned) n) < 0) return EXIT_FAILURE; log_debug("systemd-kmsg-syslogd running as pid %lu", (unsigned long) getpid()); sd_notify(false, "READY=1\n" "STATUS=Processing messages..."); for (;;) { struct epoll_event event; int k; if ((k = epoll_wait(server.epoll_fd, &event, 1, -1)) < 0) { if (errno == EINTR) continue; log_error("epoll_wait() failed: %m"); goto fail; } if (k <= 0) break; if ((k = process_event(&server, &event)) < 0) goto fail; if (k == 0) break; } r = EXIT_SUCCESS; log_debug("systemd-kmsg-syslogd stopped as pid %lu", (unsigned long) getpid()); fail: sd_notify(false, "STATUS=Shutting down..."); server_done(&server); return r; }