OpenCoverage

setproctitle.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssh/src/openbsd-compat/setproctitle.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* Based on conf.c from UCB sendmail 8.8.8 */-
2-
3/*-
4 * Copyright 2003 Damien Miller-
5 * Copyright (c) 1983, 1995-1997 Eric P. Allman-
6 * Copyright (c) 1988, 1993-
7 * The Regents of the University of California. All rights reserved.-
8 *-
9 * Redistribution and use in source and binary forms, with or without-
10 * modification, are permitted provided that the following conditions-
11 * are met:-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer.-
14 * 2. Redistributions in binary form must reproduce the above copyright-
15 * notice, this list of conditions and the following disclaimer in the-
16 * documentation and/or other materials provided with the distribution.-
17 * 3. Neither the name of the University nor the names of its contributors-
18 * may be used to endorse or promote products derived from this software-
19 * without specific prior written permission.-
20 *-
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND-
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE-
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
31 * SUCH DAMAGE.-
32 */-
33-
34#include "includes.h"-
35-
36#ifndef HAVE_SETPROCTITLE-
37-
38#include <stdarg.h>-
39#include <stdlib.h>-
40#include <unistd.h>-
41#ifdef HAVE_SYS_PSTAT_H-
42#include <sys/pstat.h>-
43#endif-
44#include <string.h>-
45-
46#include <vis.h>-
47-
48#define SPT_NONE 0 /* don't use it at all */-
49#define SPT_PSTAT 1 /* use pstat(PSTAT_SETCMD, ...) */-
50#define SPT_REUSEARGV 2 /* cover argv with title information */-
51-
52#ifndef SPT_TYPE-
53# define SPT_TYPE SPT_NONE-
54#endif-
55-
56#ifndef SPT_PADCHAR-
57# define SPT_PADCHAR '\0'-
58#endif-
59-
60#if SPT_TYPE == SPT_REUSEARGV-
61static char *argv_start = NULL;-
62static size_t argv_env_len = 0;-
63#endif-
64-
65#endif /* HAVE_SETPROCTITLE */-
66-
67void-
68compat_init_setproctitle(int argc, char *argv[])-
69{-
70#if !defined(HAVE_SETPROCTITLE) && \-
71 defined(SPT_TYPE) && SPT_TYPE == SPT_REUSEARGV-
72 extern char **environ;-
73 char *lastargv = NULL;-
74 char **envp = environ;-
75 int i;-
76-
77 /*-
78 * NB: This assumes that argv has already been copied out of the-
79 * way. This is true for sshd, but may not be true for other-
80 * programs. Beware.-
81 */-
82-
83 if (argc == 0 || argv[0] == NULL)
argc == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
argv[0] == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
0-2
84 return;
never executed: return;
0
85-
86 /* Fail if we can't allocate room for the new environment */-
87 for (i = 0; envp[i] != NULL; i++)
envp[i] != ((void *)0)Description
TRUEevaluated 110 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
2-110
88 ;
executed 110 times by 1 test: ;
Executed by:
  • sshd
110
89 if ((environ = calloc(i + 1, sizeof(*environ))) == NULL) {
(environ = cal...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
0-2
90 environ = envp; /* put it back */-
91 return;
never executed: return;
0
92 }-
93-
94 /*-
95 * Find the last argv string or environment variable within-
96 * our process memory area.-
97 */-
98 for (i = 0; i < argc; i++) {
i < argcDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
2-8
99 if (lastargv == NULL || lastargv + 1 == argv[i])
lastargv == ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 6 times by 1 test
Evaluated by:
  • sshd
lastargv + 1 == argv[i]Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
0-6
100 lastargv = argv[i] + strlen(argv[i]);
executed 8 times by 1 test: lastargv = argv[i] + strlen(argv[i]);
Executed by:
  • sshd
8
101 }
executed 8 times by 1 test: end of block
Executed by:
  • sshd
8
102 for (i = 0; envp[i] != NULL; i++) {
envp[i] != ((void *)0)Description
TRUEevaluated 110 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
2-110
103 if (lastargv + 1 == envp[i])
lastargv + 1 == envp[i]Description
TRUEevaluated 110 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
0-110
104 lastargv = envp[i] + strlen(envp[i]);
executed 110 times by 1 test: lastargv = envp[i] + strlen(envp[i]);
Executed by:
  • sshd
110
105 }
executed 110 times by 1 test: end of block
Executed by:
  • sshd
110
106-
107 argv[1] = NULL;-
108 argv_start = argv[0];-
109 argv_env_len = lastargv - argv[0] - 1;-
110-
111 /*-
112 * Copy environment-
113 * XXX - will truncate env on strdup fail-
114 */-
115 for (i = 0; envp[i] != NULL; i++)
envp[i] != ((void *)0)Description
TRUEevaluated 110 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
2-110
116 environ[i] = strdup(envp[i]);
executed 110 times by 1 test: environ[i] = (__extension__ (__builtin_constant_p ( envp[i] ) && ((size_t)(const void *)(( envp[i] ) + 1) - (size_t)(const void *)( envp[i] ) == 1) ? (((const char *) ( envp[i] ))[0] == '\0' ? (char *) calloc ((size_t) 1, (size_t) 1) : ({ size_t __len = strlen ( envp[i] ) + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)) __retval = (char *) memcpy (__retval, envp[i] , __len); __retval; })) : __strdup ( envp[i] ))) ;
Executed by:
  • sshd
never executed: __retval = (char *) memcpy (__retval, envp[i] , __len);
__retval != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
((const char *... ))[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..._p ( envp[i] )Description
TRUEnever evaluated
FALSEevaluated 110 times by 1 test
Evaluated by:
  • sshd
((size_t)(cons...nvp[i] ) == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0-110
117 environ[i] = NULL;-
118#endif /* SPT_REUSEARGV */-
119}
executed 2 times by 1 test: end of block
Executed by:
  • sshd
2
120-
121#ifndef HAVE_SETPROCTITLE-
122void-
123setproctitle(const char *fmt, ...)-
124{-
125#if SPT_TYPE != SPT_NONE-
126 va_list ap;-
127 char buf[1024], ptitle[1024];-
128 size_t len = 0;-
129 int r;-
130 extern char *__progname;-
131#if SPT_TYPE == SPT_PSTAT-
132 union pstun pst;-
133#endif-
134-
135#if SPT_TYPE == SPT_REUSEARGV-
136 if (argv_env_len <= 0)
argv_env_len <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
137 return;
never executed: return;
0
138#endif-
139-
140 strlcpy(buf, __progname, sizeof(buf));-
141-
142 r = -1;-
143 va_start(ap, fmt);-
144 if (fmt != NULL) {
fmt != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
145 len = strlcat(buf, ": ", sizeof(buf));-
146 if (len < sizeof(buf))
len < sizeof(buf)Description
TRUEnever evaluated
FALSEnever evaluated
0
147 r = vsnprintf(buf + len, sizeof(buf) - len , fmt, ap);
never executed: r = vsnprintf(buf + len, sizeof(buf) - len , fmt, ap);
0
148 }
never executed: end of block
0
149 va_end(ap);-
150 if (r == -1 || (size_t)r >= sizeof(buf) - len)
r == -1Description
TRUEnever evaluated
FALSEnever evaluated
(size_t)r >= sizeof(buf) - lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
151 return;
never executed: return;
0
152 strnvis(ptitle, buf, sizeof(ptitle),-
153 VIS_CSTYLE|VIS_NL|VIS_TAB|VIS_OCTAL);-
154-
155#if SPT_TYPE == SPT_PSTAT-
156 pst.pst_command = ptitle;-
157 pstat(PSTAT_SETCMD, pst, strlen(ptitle), 0, 0);-
158#elif SPT_TYPE == SPT_REUSEARGV-
159/* debug("setproctitle: copy \"%s\" into len %d",-
160 buf, argv_env_len); */-
161 len = strlcpy(argv_start, ptitle, argv_env_len);-
162 for(; len < argv_env_len; len++)
len < argv_env_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
163 argv_start[len] = SPT_PADCHAR;
never executed: argv_start[len] = '\0';
0
164#endif-
165-
166#endif /* SPT_NONE */-
167}
never executed: end of block
0
168-
169#endif /* HAVE_SETPROCTITLE */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2