本文整理汇总了C++中setproctitle函数的典型用法代码示例。如果您正苦于以下问题:C++ setproctitle函数的具体用法?C++ setproctitle怎么用?C++ setproctitle使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了setproctitle函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int
main(int argc, char **argv)
{
struct group *gr;
struct stat st;
int retries, backoff;
int ask, ch, cnt, quietlog, rootlogin, rval;
uid_t uid, euid;
gid_t egid;
char *term;
char *p, *ttyn;
char tname[sizeof(_PATH_TTY) + 10];
char *arg0;
const char *tp;
const char *shell = NULL;
login_cap_t *lc = NULL;
login_cap_t *lc_user = NULL;
pid_t pid;
#ifdef USE_BSM_AUDIT
char auditsuccess = 1;
#endif
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
signal(SIGHUP, SIG_IGN);
if (setjmp(timeout_buf)) {
if (failures)
badlogin(username);
fprintf(stderr, "Login timed out after %d seconds\n",
timeout);
bail(NO_SLEEP_EXIT, 0);
}
signal(SIGALRM, timedout);
alarm(timeout);
setpriority(PRIO_PROCESS, 0, 0);
openlog("login", LOG_ODELAY, LOG_AUTH);
uid = getuid();
euid = geteuid();
egid = getegid();
while ((ch = getopt(argc, argv, "fh:p")) != -1)
switch (ch) {
case 'f':
fflag = 1;
break;
case 'h':
if (uid != 0)
errx(1, "-h option: %s", strerror(EPERM));
if (strlen(optarg) >= MAXHOSTNAMELEN)
errx(1, "-h option: %s: exceeds maximum "
"hostname size", optarg);
hflag = 1;
hostname = optarg;
break;
case 'p':
pflag = 1;
break;
case '?':
default:
if (uid == 0)
syslog(LOG_ERR, "invalid flag %c", ch);
usage();
}
argc -= optind;
argv += optind;
if (argc > 0) {
username = strdup(*argv);
if (username == NULL)
err(1, "strdup()");
ask = 0;
} else {
ask = 1;
}
setproctitle("-%s", getprogname());
for (cnt = getdtablesize(); cnt > 2; cnt--)
close(cnt);
/*
* Get current TTY
*/
ttyn = ttyname(STDIN_FILENO);
if (ttyn == NULL || *ttyn == '\0') {
snprintf(tname, sizeof(tname), "%s??", _PATH_TTY);
ttyn = tname;
}
if (strncmp(ttyn, _PATH_DEV, sizeof(_PATH_DEV) -1) == 0)
tty = ttyn + sizeof(_PATH_DEV) -1;
else
tty = ttyn;
/*
* Get "login-retries" & "login-backoff" from default class
*/
lc = login_getclass(NULL);
prompt = login_getcapstr(lc, "login_prompt",
//.........这里部分代码省略.........
示例2: main
//.........这里部分代码省略.........
warnx(_("\nSession setup problem, abort."));
pam_end(cxt.pamh, PAM_SYSTEM_ERR);
sleepexit(EXIT_FAILURE);
}
/*
* Open PAM session (after successful authentication and account check)
*/
loginpam_session(&cxt);
/* committed to login -- turn off timeout */
alarm((unsigned int)0);
endpwent();
cxt.quiet = get_hushlogin_status(pwd);
log_utmp(&cxt);
log_audit(&cxt, 1);
log_lastlog(&cxt);
chown_tty(&cxt);
if (setgid(pwd->pw_gid) < 0 && pwd->pw_gid) {
syslog(LOG_ALERT, _("setgid() failed"));
exit(EXIT_FAILURE);
}
if (pwd->pw_shell == NULL || *pwd->pw_shell == '\0')
pwd->pw_shell = _PATH_BSHELL;
init_environ(&cxt); /* init $HOME, $TERM ... */
setproctitle("login", cxt.username);
log_syslog(&cxt);
if (!cxt.quiet) {
motd();
#ifdef LOGIN_STAT_MAIL
/*
* This turns out to be a bad idea: when the mail spool
* is NFS mounted, and the NFS connection hangs, the
* login hangs, even root cannot login.
* Checking for mail should be done from the shell.
*/
{
struct stat st;
char *mail;
mail = getenv("MAIL");
if (mail && stat(mail, &st) == 0 && st.st_size != 0) {
if (st.st_mtime > st.st_atime)
printf(_("You have new mail.\n"));
else
printf(_("You have mail.\n"));
}
}
#endif
}
/*
* Detach the controlling terminal, fork() and create, new session
* and reinilizalize syslog stuff.
*/
示例3: main
int
main(int argc, char **argv)
{
int ch, np, ret, Xflag = 0;
pcap_handler phandler = dump_packet;
const char *errstr = NULL;
char *pidf = NULL;
ret = 0;
closefrom(STDERR_FILENO + 1);
while ((ch = getopt(argc, argv, "Dxd:f:i:p:s:")) != -1) {
switch (ch) {
case 'D':
Debug = 1;
break;
case 'd':
delay = strtonum(optarg, 5, 60*60, &errstr);
if (errstr)
usage();
break;
case 'f':
filename = optarg;
break;
case 'i':
interface = optarg;
break;
case 'p':
pidf = optarg;
break;
case 's':
snaplen = strtonum(optarg, 0, PFLOGD_MAXSNAPLEN,
&errstr);
if (snaplen <= 0)
snaplen = DEF_SNAPLEN;
if (errstr)
snaplen = PFLOGD_MAXSNAPLEN;
break;
case 'x':
Xflag++;
break;
default:
usage();
}
}
log_debug = Debug;
argc -= optind;
argv += optind;
/* does interface exist */
if (!if_exists(interface)) {
warn("Failed to initialize: %s", interface);
logmsg(LOG_ERR, "Failed to initialize: %s", interface);
logmsg(LOG_ERR, "Exiting, init failure");
exit(1);
}
if (!Debug) {
openlog("pflogd", LOG_PID | LOG_CONS, LOG_DAEMON);
if (daemon(0, 0)) {
logmsg(LOG_WARNING, "Failed to become daemon: %s",
strerror(errno));
}
pidfile(pidf);
}
tzset();
(void)umask(S_IRWXG | S_IRWXO);
/* filter will be used by the privileged process */
if (argc) {
filter = copy_argv(argv);
if (filter == NULL)
logmsg(LOG_NOTICE, "Failed to form filter expression");
}
/* initialize pcap before dropping privileges */
if (init_pcap()) {
logmsg(LOG_ERR, "Exiting, init failure");
exit(1);
}
/* Privilege separation begins here */
if (priv_init()) {
logmsg(LOG_ERR, "unable to privsep");
exit(1);
}
setproctitle("[initializing]");
/* Process is now unprivileged and inside a chroot */
signal(SIGTERM, sig_close);
signal(SIGINT, sig_close);
signal(SIGQUIT, sig_close);
signal(SIGALRM, sig_alrm);
signal(SIGUSR1, sig_usr1);
signal(SIGHUP, sig_hup);
alarm(delay);
//.........这里部分代码省略.........
示例4: handle_feature_check
/*
* Generic function to handle CRIU_REQ_TYPE__FEATURE_CHECK.
*
* The function will have resp.success = true for most cases
* and the actual result will be in resp.features.
*
* For each feature which has been requested in msg->features
* the corresponding parameter will be set in resp.features.
*/
static int handle_feature_check(int sk, CriuReq * msg)
{
CriuResp resp = CRIU_RESP__INIT;
CriuFeatures feat = CRIU_FEATURES__INIT;
int pid, status;
int ret;
/* enable setting of an optional message */
feat.has_mem_track = 1;
feat.mem_track = false;
feat.has_lazy_pages = 1;
feat.lazy_pages = false;
pid = fork();
if (pid < 0) {
pr_perror("Can't fork");
goto out;
}
if (pid == 0) {
/* kerndat_init() is called from setup_opts_from_req() */
if (setup_opts_from_req(sk, msg->opts))
exit(1);
setproctitle("feature-check --rpc");
if ((msg->features->has_mem_track == 1) &&
(msg->features->mem_track == true))
feat.mem_track = kdat.has_dirty_track;
if ((msg->features->has_lazy_pages == 1) &&
(msg->features->lazy_pages == true))
feat.lazy_pages = kdat.has_uffd && uffd_noncooperative();
resp.features = &feat;
resp.type = msg->type;
/* The feature check is working, actual results are in resp.features */
resp.success = true;
/*
* If this point is reached the information about the features
* is transmitted from the forked CRIU process (here).
* If an error occurred earlier, the feature check response will be
* be send from the parent process.
*/
ret = send_criu_msg(sk, &resp);
exit(!!ret);
}
if (waitpid(pid, &status, 0) != pid) {
pr_perror("Unable to wait %d", pid);
goto out;
}
if (status != 0)
goto out;
/*
* The child process was not able to send an answer. Tell
* the RPC client that something did not work as expected.
*/
out:
resp.type = msg->type;
resp.success = false;
return send_criu_msg(sk, &resp);
}
示例5: main
//.........这里部分代码省略.........
strictio = 1;
break;
case 'U':
guest_uuid_str = optarg;
break;
case 'w':
strictmsr = 0;
break;
case 'W':
virtio_msix = 0;
break;
case 'x':
x2apic_mode = 1;
break;
case 'h':
usage(0);
default:
usage(1);
}
}
argc -= optind;
argv += optind;
if (argc != 1)
usage(1);
vmname = argv[0];
ctx = vm_open(vmname);
if (ctx == NULL) {
perror("vm_open");
exit(1);
}
max_vcpus = num_vcpus_allowed(ctx);
if (guest_ncpus > max_vcpus) {
fprintf(stderr, "%d vCPUs requested but only %d available\n",
guest_ncpus, max_vcpus);
exit(1);
}
fbsdrun_set_capabilities(ctx, BSP);
err = vm_setup_memory(ctx, memsize, VM_MMAP_ALL);
if (err) {
fprintf(stderr, "Unable to setup memory (%d)\n", err);
exit(1);
}
init_mem();
init_inout();
ioapic_init(ctx);
rtc_init(ctx);
/*
* Exit if a device emulation finds an error in it's initilization
*/
if (init_pci(ctx) != 0)
exit(1);
if (gdb_port != 0)
init_dbgport(gdb_port);
if (bvmcons)
init_bvmcons();
error = vm_get_register(ctx, BSP, VM_REG_GUEST_RIP, &rip);
assert(error == 0);
/*
* build the guest tables, MP etc.
*/
mptable_build(ctx, guest_ncpus);
error = smbios_build(ctx);
assert(error == 0);
if (acpi) {
error = acpi_build(ctx, guest_ncpus);
assert(error == 0);
}
/*
* Change the proc title to include the VM name.
*/
setproctitle("%s", vmname);
/*
* Add CPU 0
*/
fbsdrun_addcpu(ctx, BSP, BSP, rip);
/*
* Head off to the main event dispatch loop
*/
mevent_dispatch();
exit(1);
}
示例6: main
int
main(int argc, char *argv[])
{
extern char *optarg; /* argument to option if any */
int i; /* counter in a for loop */
char *p; /* used to obtain the key */
DES_cblock msgbuf; /* I/O buffer */
int kflag; /* command-line encryption key */
setproctitle("-"); /* Hide command-line arguments */
/* initialize the initialization vector */
MEMZERO(ivec, 8);
/* process the argument list */
kflag = 0;
while ((i = getopt(argc, argv, "abdF:f:k:m:o:pv:")) != -1)
switch(i) {
case 'a': /* key is ASCII */
keybase = KEY_ASCII;
break;
case 'b': /* use ECB mode */
alg = ALG_ECB;
break;
case 'd': /* decrypt */
mode = MODE_DECRYPT;
break;
case 'F': /* use alternative CFB mode */
alg = ALG_CFBA;
if ((fbbits = setbits(optarg, 7)) > 56 || fbbits == 0)
errx(1, "-F: number must be 1-56 inclusive");
else if (fbbits == -1)
errx(1, "-F: number must be a multiple of 7");
break;
case 'f': /* use CFB mode */
alg = ALG_CFB;
if ((fbbits = setbits(optarg, 8)) > 64 || fbbits == 0)
errx(1, "-f: number must be 1-64 inclusive");
else if (fbbits == -1)
errx(1, "-f: number must be a multiple of 8");
break;
case 'k': /* encryption key */
kflag = 1;
cvtkey(msgbuf, optarg);
break;
case 'm': /* number of bits for MACing */
mode = MODE_AUTHENTICATE;
if ((macbits = setbits(optarg, 1)) > 64)
errx(1, "-m: number must be 0-64 inclusive");
break;
case 'o': /* use OFB mode */
alg = ALG_OFB;
if ((fbbits = setbits(optarg, 8)) > 64 || fbbits == 0)
errx(1, "-o: number must be 1-64 inclusive");
else if (fbbits == -1)
errx(1, "-o: number must be a multiple of 8");
break;
case 'p': /* preserve parity bits */
pflag = 1;
break;
case 'v': /* set initialization vector */
cvtkey(ivec, optarg);
break;
default: /* error */
usage();
}
if (!kflag) {
/*
* if the key's not ASCII, assume it is
*/
keybase = KEY_ASCII;
/*
* get the key
*/
p = getpass("Enter key: ");
/*
* copy it, nul-padded, into the key area
*/
cvtkey(msgbuf, p);
}
makekey(&msgbuf);
inverse = (alg == ALG_CBC || alg == ALG_ECB) && mode == MODE_DECRYPT;
switch(alg) {
case ALG_CBC:
switch(mode) {
case MODE_AUTHENTICATE: /* authenticate using CBC mode */
cbcauth();
break;
case MODE_DECRYPT: /* decrypt using CBC mode */
cbcdec();
break;
case MODE_ENCRYPT: /* encrypt using CBC mode */
cbcenc();
break;
}
break;
case ALG_CFB:
//.........这里部分代码省略.........
示例7: utmpfix
int utmpfix(int argc, char **argv)
{
int i, fast = 0, nownum = SHM->UTMPnumber;
int which, nactive = 0, dofork = 1, daemonsleep = 0;
time_t now;
const char *clean;
char buf[1024];
IDLE_t idle[USHM_SIZE];
char changeflag = 0;
time_t idletimeout = IDLE_TIMEOUT;
int lowerbound = 100, upperbound = 0;
char ch;
int killtop = 0;
struct {
pid_t pid;
int where;
} killlist[USHM_SIZE];
while( (ch = getopt(argc, argv, "nt:l:FD:u:")) != -1 )
switch( ch ){
case 'n':
fast = 1;
break;
case 't':
idletimeout = atoi(optarg);
break;
case 'l':
lowerbound = atoi(optarg);
break;
case 'F':
dofork = 0;
break;
case 'D':
daemonsleep = atoi(optarg);
break;
case 'u':
upperbound = atoi(optarg);
break;
default:
printf("usage:\tshmctl\tutmpfix [-n] [-t timeout] [-F] [-D sleep]\n");
return 1;
}
if( daemonsleep )
switch( fork() ){
case -1:
perror("fork()");
return 0;
case 0:
break;
default:
return 0;
}
if( daemonsleep || dofork ){
int times = 1000, status;
pid_t pid;
while( daemonsleep ? 1 : times-- )
switch( pid = fork() ){
case -1:
sleep(1);
break;
case 0:
#ifndef VALGRIND
setproctitle("utmpfix");
#endif
goto DoUtmpfix;
default:
#ifndef VALGRIND
setproctitle(daemonsleep ? "utmpfixd(wait for %d)" :
"utmpfix(wait for %d)", (int)pid);
#endif
waitpid(pid, &status, 0);
if( WIFEXITED(status) && !daemonsleep )
return 0;
if( !WIFEXITED(status) ){
/* last utmpfix fails, so SHM->UTMPbusystate is holded */
SHM->UTMPbusystate = 0;
}
}
return 0; // never reach
}
DoUtmpfix:
killtop=0;
changeflag=0;
for( i = 0 ; i < 5 ; ++i )
if( !SHM->UTMPbusystate )
break;
else{
puts("utmpshm is busy....");
sleep(1);
}
SHM->UTMPbusystate = 1;
printf("starting scaning... %s \n", (fast ? "(fast mode)" : ""));
nownum = SHM->UTMPnumber;
now = time(NULL);
for( i = 0, nactive = 0 ; i < USHM_SIZE ; ++i )
//.........这里部分代码省略.........
示例8: rspamd_fork_worker
struct rspamd_worker *
rspamd_fork_worker (struct rspamd_main *rspamd_main,
struct rspamd_worker_conf *cf,
guint index,
struct event_base *ev_base)
{
struct rspamd_worker *wrk;
gint rc;
struct rlimit rlim;
/* Starting worker process */
wrk = (struct rspamd_worker *) g_malloc0 (sizeof (struct rspamd_worker));
if (!rspamd_socketpair (wrk->control_pipe)) {
msg_err ("socketpair failure: %s", strerror (errno));
exit (-errno);
}
if (!rspamd_socketpair (wrk->srv_pipe)) {
msg_err ("socketpair failure: %s", strerror (errno));
exit (-errno);
}
wrk->srv = rspamd_main;
wrk->type = cf->type;
wrk->cf = g_malloc (sizeof (struct rspamd_worker_conf));
memcpy (wrk->cf, cf, sizeof (struct rspamd_worker_conf));
wrk->index = index;
wrk->ctx = cf->ctx;
wrk->pid = fork ();
switch (wrk->pid) {
case 0:
/* Update pid for logging */
rspamd_log_update_pid (cf->type, rspamd_main->logger);
/* Remove the inherited event base */
event_reinit (rspamd_main->ev_base);
event_base_free (rspamd_main->ev_base);
/* Lock statfile pool if possible XXX */
/* Init PRNG after fork */
rc = ottery_init (rspamd_main->cfg->libs_ctx->ottery_cfg);
rspamd_random_seed_fast ();
if (rc != OTTERY_ERR_NONE) {
msg_err_main ("cannot initialize PRNG: %d", rc);
g_assert (0);
}
g_random_set_seed (ottery_rand_uint32 ());
/* Drop privilleges */
rspamd_worker_drop_priv (rspamd_main);
/* Set limits */
rspamd_worker_set_limits (rspamd_main, cf);
/* Re-set stack limit */
getrlimit (RLIMIT_STACK, &rlim);
rlim.rlim_cur = 100 * 1024 * 1024;
rlim.rlim_max = rlim.rlim_cur;
setrlimit (RLIMIT_STACK, &rlim);
setproctitle ("%s process", cf->worker->name);
rspamd_pidfile_close (rspamd_main->pfh);
/* Do silent log reopen to avoid collisions */
rspamd_log_close (rspamd_main->logger);
rspamd_log_open (rspamd_main->logger);
wrk->start_time = rspamd_get_calendar_ticks ();
#if ((GLIB_MAJOR_VERSION == 2) && (GLIB_MINOR_VERSION <= 30))
# if (GLIB_MINOR_VERSION > 20)
/* Ugly hack for old glib */
if (!g_thread_get_initialized ()) {
g_thread_init (NULL);
}
# else
g_thread_init (NULL);
# endif
#endif
msg_info_main ("starting %s process %P", cf->worker->name, getpid ());
/* Close parent part of socketpair */
close (wrk->control_pipe[0]);
close (wrk->srv_pipe[0]);
rspamd_socket_nonblocking (wrk->control_pipe[1]);
rspamd_socket_nonblocking (wrk->srv_pipe[1]);
/* Execute worker */
cf->worker->worker_start_func (wrk);
exit (EXIT_FAILURE);
break;
case -1:
msg_err_main ("cannot fork main process. %s", strerror (errno));
rspamd_pidfile_remove (rspamd_main->pfh);
exit (-errno);
break;
default:
/* Close worker part of socketpair */
close (wrk->control_pipe[1]);
close (wrk->srv_pipe[1]);
rspamd_socket_nonblocking (wrk->control_pipe[0]);
rspamd_socket_nonblocking (wrk->srv_pipe[0]);
rspamd_srv_start_watching (wrk, ev_base);
/* Insert worker into worker's table, pid is index */
g_hash_table_insert (rspamd_main->workers, GSIZE_TO_POINTER (
//.........这里部分代码省略.........
示例9: ManageSession
void ManageSession(struct display *d)
{
static int pid = 0;
Display *dpy;
greet_user_rtn greet_stat;
#ifdef WITH_CONSOLE_KIT
char *ck_session_cookie = NULL;
#endif
WDMDebug("ManageSession %s\n", d->name);
(void)XSetIOErrorHandler(IOErrorHandler);
(void)XSetErrorHandler(ErrorHandler);
#ifndef HAS_SETPROCTITLE
SetTitle(d->name, (char *)0);
#else
setproctitle("%s", d->name);
#endif
/*
* Load system default Resources
*/
LoadXloginResources(d);
verify.version = 1;
greet.version = 1;
greet_stat = GreetUser(d, &dpy, &verify, &greet);
if (greet_stat == Greet_Success) {
clientPid = 0;
if (!Setjmp(abortSession)) {
(void)Signal(SIGTERM, catchTerm);
/*
* Start the clients, changing uid/groups
* setting up environment and running the session
*/
#ifdef WITH_CONSOLE_KIT
ck_session_cookie = open_ck_session(getpwnam(greet.name), d);
#endif
if (StartClient(&verify, d, &clientPid, greet.name, greet.password
#ifdef WITH_CONSOLE_KIT
, ck_session_cookie
#endif
)) {
WDMDebug("Client Started\n");
/*
* Wait for session to end,
*/
for (;;) {
if (d->pingInterval) {
if (!Setjmp(pingTime)) {
(void)Signal(SIGALRM, catchAlrm);
(void)alarm(d->pingInterval * 60);
pid = wait((waitType *) 0);
(void)alarm(0);
} else {
(void)alarm(0);
if (!PingServer(d, (Display *) NULL))
SessionPingFailed(d);
}
} else {
pid = wait((waitType *) 0);
}
if (pid == clientPid)
break;
}
} else {
WDMError("session start failed\n");
}
} else {
/*
* when terminating the session, nuke
* the child and then run the reset script
*/
AbortClient(clientPid);
}
}
#ifdef WITH_CONSOLE_KIT
if (ck_session_cookie != NULL) {
close_ck_session(ck_session_cookie);
free(ck_session_cookie);
}
#endif
/*
* run system-wide reset file
*/
WDMDebug("Source reset program %s\n", d->reset);
source(verify.systemEnviron, d->reset);
SessionExit(d, OBEYSESS_DISPLAY, TRUE);
}
示例10: client_init
int
client_init(char *path, struct client_ctx *cctx, int cmdflags, int flags)
{
struct sockaddr_un sa;
struct stat sb;
struct msg_identify_data data;
struct winsize ws;
size_t size;
int fd, fd2, mode;
char *name, *term;
#ifdef HAVE_SETPROCTITLE
char rpathbuf[MAXPATHLEN];
#endif
#ifdef HAVE_SETPROCTITLE
if (realpath(path, rpathbuf) == NULL)
strlcpy(rpathbuf, path, sizeof rpathbuf);
setproctitle("client (%s)", rpathbuf);
#endif
if (lstat(path, &sb) != 0) {
if (cmdflags & CMD_STARTSERVER && errno == ENOENT) {
if ((fd = server_start(path)) == -1)
goto start_failed;
goto server_started;
}
goto not_found;
}
if (!S_ISSOCK(sb.st_mode)) {
errno = ENOTSOCK;
goto not_found;
}
memset(&sa, 0, sizeof sa);
sa.sun_family = AF_UNIX;
size = strlcpy(sa.sun_path, path, sizeof sa.sun_path);
if (size >= sizeof sa.sun_path) {
errno = ENAMETOOLONG;
goto not_found;
}
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
fatal("socket");
if (connect(fd, (struct sockaddr *) &sa, SUN_LEN(&sa)) == -1) {
if (errno == ECONNREFUSED) {
if (unlink(path) != 0 || !(cmdflags & CMD_STARTSERVER))
goto not_found;
if ((fd = server_start(path)) == -1)
goto start_failed;
goto server_started;
}
goto not_found;
}
server_started:
if ((mode = fcntl(fd, F_GETFL)) == -1)
fatal("fcntl failed");
if (fcntl(fd, F_SETFL, mode|O_NONBLOCK) == -1)
fatal("fcntl failed");
imsg_init(&cctx->ibuf, fd);
if (cmdflags & CMD_SENDENVIRON)
client_send_environ(cctx);
if (isatty(STDIN_FILENO)) {
if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) == -1)
fatal("ioctl(TIOCGWINSZ)");
data.flags = flags;
data.sx = ws.ws_col;
data.sy = ws.ws_row;
if (getcwd(data.cwd, sizeof data.cwd) == NULL)
*data.cwd = '\0';
*data.term = '\0';
if ((term = getenv("TERM")) != NULL) {
if (strlcpy(data.term,
term, sizeof data.term) >= sizeof data.term)
*data.term = '\0';
}
*data.tty = '\0';
if ((name = ttyname(STDIN_FILENO)) == NULL)
fatal("ttyname failed");
if (strlcpy(data.tty, name, sizeof data.tty) >= sizeof data.tty)
fatalx("ttyname failed");
fd2 = dup(STDIN_FILENO);
imsg_compose(&cctx->ibuf, MSG_IDENTIFY,
PROTOCOL_VERSION, -1, fd2, &data, sizeof data);
}
return (0);
start_failed:
log_warnx("server failed to start");
return (1);
not_found:
log_warn("server not found");
//.........这里部分代码省略.........
示例11: main
//-----------------------------------------------------------------------------
int main(int argc, char *argv[])
{
SETTINGS_IMPL settings;
if (argc == 2)
{
settings.SetConfFile(argv[1]);
}
else
{
// Usage
}
if (settings.ReadSettings())
{
printf("ReadSettingsError\n");
printf("%s\n", settings.GetStrError().c_str());
exit(-1);
}
settings.Print();
if (settings.GetDaemon())
{
switch (fork())
{
case -1:
exit(1);
break;
case 0:
setsid();
break;
default:
exit(0);
break;
}
}
clnp = new IA_CLIENT_PROT(settings.GetServerName(), settings.GetServerPort(), settings.GetLocalName(), settings.GetLocalPort());
if (!settings.GetNoWeb())
{
web = new WEB();
web->SetRefreshPagePeriod(settings.GetRefreshPeriod());
web->SetListenAddr(settings.GetListenWebIP());
web->Start();
}
clnp->SetLogin(settings.GetLogin());
clnp->SetPassword(settings.GetPassword());
clnp->SetStatusChangedCb(StatusChanged, NULL);
clnp->SetInfoCb(ShowMessage, NULL);
clnp->SetErrorCb(ShowError, NULL);
clnp->SetDirNameCb(SetDirName, NULL);
clnp->SetStatChangedCb(StatUpdate, NULL);
clnp->SetReconnect(settings.GetReconnect());
clnp->Start();
SetSignalHandlers();
#ifdef LINUX
for (int i = 1; i < argc; i++)
memset(argv[i], 0, strlen(argv[i]));
if(argc > 1)
strcpy(argv[1], "Connecting...");
#endif
#ifdef FREEBSD
setproctitle("Connecting...");
#endif
clnp->Connect();
while (1)
{
struct timespec ts = {0, 200000000};
nanosleep(&ts, NULL);
char state[20];
if (clnp->GetAuthorized())
{
if (settings.GetShowPid())
sprintf(state, "On %d", getpid());
else
strcpy(state, "Online");
}
else
{
if (settings.GetShowPid())
sprintf(state, "Off %d", getpid());
else
strcpy(state, "Offline");
}
#ifdef LINUX
//.........这里部分代码省略.........
示例12: rde
/* route decision engine */
pid_t
rde(struct ripd_conf *xconf, int pipe_parent2rde[2], int pipe_ripe2rde[2],
int pipe_parent2ripe[2])
{
struct event ev_sigint, ev_sigterm;
struct passwd *pw;
struct redistribute *r;
pid_t pid;
switch (pid = fork()) {
case -1:
fatal("cannot fork");
/* NOTREACHED */
case 0:
break;
default:
return (pid);
}
rdeconf = xconf;
if ((pw = getpwnam(RIPD_USER)) == NULL)
fatal("getpwnam");
if (chroot(pw->pw_dir) == -1)
fatal("chroot");
if (chdir("/") == -1)
fatal("chdir(\"/\")");
setproctitle("route decision engine");
ripd_process = PROC_RDE_ENGINE;
if (setgroups(1, &pw->pw_gid) ||
setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) ||
setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid))
fatal("can't drop privileges");
event_init();
/* setup signal handler */
signal_set(&ev_sigint, SIGINT, rde_sig_handler, NULL);
signal_set(&ev_sigterm, SIGTERM, rde_sig_handler, NULL);
signal_add(&ev_sigint, NULL);
signal_add(&ev_sigterm, NULL);
signal(SIGPIPE, SIG_IGN);
signal(SIGHUP, SIG_IGN);
/* setup pipes */
close(pipe_ripe2rde[0]);
close(pipe_parent2rde[0]);
close(pipe_parent2ripe[0]);
close(pipe_parent2ripe[1]);
if ((iev_ripe = malloc(sizeof(struct imsgev))) == NULL ||
(iev_main = malloc(sizeof(struct imsgev))) == NULL)
fatal(NULL);
imsg_init(&iev_ripe->ibuf, pipe_ripe2rde[1]);
iev_ripe->handler = rde_dispatch_imsg;
imsg_init(&iev_main->ibuf, pipe_parent2rde[1]);
iev_main->handler = rde_dispatch_parent;
/* setup event handler */
iev_ripe->events = EV_READ;
event_set(&iev_ripe->ev, iev_ripe->ibuf.fd, iev_ripe->events,
iev_ripe->handler, iev_ripe);
event_add(&iev_ripe->ev, NULL);
iev_main->events = EV_READ;
event_set(&iev_main->ev, iev_main->ibuf.fd, iev_main->events,
iev_main->handler, iev_main);
event_add(&iev_main->ev, NULL);
rt_init();
/* remove unneeded config stuff */
while ((r = SIMPLEQ_FIRST(&rdeconf->redist_list)) != NULL) {
SIMPLEQ_REMOVE_HEAD(&rdeconf->redist_list, entry);
free(r);
}
event_dispatch();
rde_shutdown();
/* NOTREACHED */
return (0);
}
示例13: proc_title_set
/**
* Set proctitle. Append cmd in the protitle.
*
* You should call proc_title_init() to init the proc_title before call
* proc_title_set() to append cmd.
*
* @param cmd
*/
void proc_title_set(const char *cmd)
{
setproctitle("%s: %s", proc_title, cmd);
}
示例14: main
//.........这里部分代码省略.........
usage();
if (!(flags & CLIENT_UTF8)) {
/*
* If the user has set whichever of LC_ALL, LC_CTYPE or LANG
* exist (in that order) to contain UTF-8, it is a safe
* assumption that either they are using a UTF-8 terminal, or
* if not they know that output from UTF-8-capable programs may
* be wrong.
*/
if ((s = getenv("LC_ALL")) == NULL || *s == '\0') {
if ((s = getenv("LC_CTYPE")) == NULL || *s == '\0')
s = getenv("LANG");
}
if (s != NULL && (strcasestr(s, "UTF-8") != NULL ||
strcasestr(s, "UTF8") != NULL))
flags |= CLIENT_UTF8;
}
environ_init(&global_environ);
for (var = environ; *var != NULL; var++)
environ_put(&global_environ, *var);
if (getcwd(tmp, sizeof tmp) != NULL)
environ_set(&global_environ, "PWD", tmp);
options_init(&global_options, NULL);
options_table_populate_tree(server_options_table, &global_options);
options_init(&global_s_options, NULL);
options_table_populate_tree(session_options_table, &global_s_options);
options_set_string(&global_s_options, "default-shell", "%s",
getshell());
options_init(&global_w_options, NULL);
options_table_populate_tree(window_options_table, &global_w_options);
/* Enable UTF-8 if the first client is on UTF-8 terminal. */
if (flags & CLIENT_UTF8) {
options_set_number(&global_s_options, "status-utf8", 1);
options_set_number(&global_s_options, "mouse-utf8", 1);
options_set_number(&global_w_options, "utf8", 1);
}
/* Override keys to vi if VISUAL or EDITOR are set. */
if ((s = getenv("VISUAL")) != NULL || (s = getenv("EDITOR")) != NULL) {
if (strrchr(s, '/') != NULL)
s = strrchr(s, '/') + 1;
if (strstr(s, "vi") != NULL)
keys = MODEKEY_VI;
else
keys = MODEKEY_EMACS;
options_set_number(&global_s_options, "status-keys", keys);
options_set_number(&global_w_options, "mode-keys", keys);
}
/*
* Figure out the socket path. If specified on the command-line with -S
* or -L, use it, otherwise try $TMUX or assume -L default.
*/
if (path == NULL) {
/* If no -L, use the environment. */
if (label == NULL) {
s = getenv("TMUX");
if (s != NULL) {
path = xstrdup(s);
path[strcspn (path, ",")] = '\0';
if (*path == '\0') {
free(path);
label = xstrdup("default");
}
} else
label = xstrdup("default");
}
/* -L or default set. */
if (label != NULL) {
if ((path = makesocketpath(label)) == NULL) {
fprintf(stderr, "can't create socket: %s\n",
strerror(errno));
exit(1);
}
}
}
free(label);
if (strlcpy(socket_path, path, sizeof socket_path) >=
sizeof socket_path) {
fprintf(stderr, "socket path too long: %s\n", path);
exit(1);
}
free(path);
#ifdef HAVE_SETPROCTITLE
/* Set process title. */
setproctitle("%s (%s)", __progname, socket_path);
#endif
/* Pass control to the client. */
exit(client_main(osdep_event_init(), argc, argv, flags));
}
示例15: tls_exec_client
static void
tls_exec_client(const char *user, int startfd, const char *srcaddr,
const char *dstaddr, const char *fingerprint, const char *defport,
int timeout, int debuglevel)
{
struct proto_conn *tcp;
char *saddr, *daddr;
SSL_CTX *sslctx;
SSL *ssl;
long ret;
int sockfd, tcpfd;
uint8_t connected;
pjdlog_debug_set(debuglevel);
pjdlog_prefix_set("[TLS sandbox] (client) ");
#ifdef HAVE_SETPROCTITLE
setproctitle("[TLS sandbox] (client) ");
#endif
proto_set("tcp:port", defport);
sockfd = startfd;
/* Change tls:// to tcp://. */
if (srcaddr == NULL) {
saddr = NULL;
} else {
saddr = strdup(srcaddr);
if (saddr == NULL)
pjdlog_exitx(EX_TEMPFAIL, "Unable to allocate memory.");
bcopy("tcp://", saddr, 6);
}
daddr = strdup(dstaddr);
if (daddr == NULL)
pjdlog_exitx(EX_TEMPFAIL, "Unable to allocate memory.");
bcopy("tcp://", daddr, 6);
/* Establish TCP connection. */
if (proto_connect(saddr, daddr, timeout, &tcp) == -1)
exit(EX_TEMPFAIL);
SSL_load_error_strings();
SSL_library_init();
/*
* TODO: On FreeBSD we could move this below sandbox() once libc and
* libcrypto use sysctl kern.arandom to obtain random data
* instead of /dev/urandom and friends.
*/
sslctx = SSL_CTX_new(TLSv1_client_method());
if (sslctx == NULL)
pjdlog_exitx(EX_TEMPFAIL, "SSL_CTX_new() failed.");
if (sandbox(user, true, "proto_tls client: %s", dstaddr) != 0)
pjdlog_exitx(EX_CONFIG, "Unable to sandbox TLS client.");
pjdlog_debug(1, "Privileges successfully dropped.");
SSL_CTX_set_options(sslctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
/* Load CA certs. */
/* TODO */
//SSL_CTX_load_verify_locations(sslctx, cacerts_file, NULL);
ssl = SSL_new(sslctx);
if (ssl == NULL)
pjdlog_exitx(EX_TEMPFAIL, "SSL_new() failed.");
tcpfd = proto_descriptor(tcp);
block(tcpfd);
if (SSL_set_fd(ssl, tcpfd) != 1)
pjdlog_exitx(EX_TEMPFAIL, "SSL_set_fd() failed.");
ret = SSL_connect(ssl);
ssl_check_error(ssl, (int)ret);
nonblock(sockfd);
nonblock(tcpfd);
tls_certificate_verify(ssl, fingerprint);
/*
* The following byte is send to make proto_connect_wait() to work.
*/
connected = 1;
for (;;) {
switch (send(sockfd, &connected, sizeof(connected), 0)) {
case -1:
if (errno == EINTR || errno == ENOBUFS)
continue;
if (errno == EAGAIN) {
(void)wait_for_fd(sockfd, -1);
continue;
}
pjdlog_exit(EX_TEMPFAIL, "send() failed");
case 0:
pjdlog_debug(1, "Connection terminated.");
exit(0);
case 1:
break;
//.........这里部分代码省略.........