OpenCoverage

readpass.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssh/src/readpass.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11-
12static char *-
13ssh_askpass(char *askpass, const char *msg)-
14{-
15 pid_t pid, ret;-
16 size_t len;-
17 char *pass;-
18 int p[2], status;-
19 char buf[1024];-
20 void (*osigchld)(int);-
21-
22 if (fflush(
fflush( stdout ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
23 stdout
fflush( stdout ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
24 ) != 0
fflush( stdout ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
25 error("ssh_askpass: fflush: %s", strerror(
never executed: error("ssh_askpass: fflush: %s", strerror( (*__errno_location ()) ));
0
26 (*__errno_location ())
never executed: error("ssh_askpass: fflush: %s", strerror( (*__errno_location ()) ));
0
27 ));
never executed: error("ssh_askpass: fflush: %s", strerror( (*__errno_location ()) ));
0
28 if (askpass ==
askpass == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
29 ((void *)0)
askpass == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
30 )-
31 fatal("internal error: askpass undefined");
never executed: fatal("internal error: askpass undefined");
0
32 if (pipe(p) < 0
pipe(p) < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
33 error("ssh_askpass: pipe: %s", strerror(-
34 (*__errno_location ())-
35 ));-
36 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
37 ((void *)0)
never executed: return ((void *)0) ;
0
38 ;
never executed: return ((void *)0) ;
0
39 }-
40 osigchld = mysignal(-
41 17-
42 ,-
43 ((__sighandler_t) 0)-
44 );-
45 if ((
(pid = fork()) < 0Description
TRUEnever evaluated
FALSEnever evaluated
pid = fork()) < 0
(pid = fork()) < 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
46 error("ssh_askpass: fork: %s", strerror(-
47 (*__errno_location ())-
48 ));-
49 mysignal(-
50 17-
51 ,osigchld);-
52 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
53 ((void *)0)
never executed: return ((void *)0) ;
0
54 ;
never executed: return ((void *)0) ;
0
55 }-
56 if (pid == 0
pid == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
57 close(p[0]);-
58 if (dup2(p[1],
dup2(p[1], 1 ) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
59 1
dup2(p[1], 1 ) < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
60 ) < 0
dup2(p[1], 1 ) < 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
61 fatal("ssh_askpass: dup2: %s", strerror(
never executed: fatal("ssh_askpass: dup2: %s", strerror( (*__errno_location ()) ));
0
62 (*__errno_location ())
never executed: fatal("ssh_askpass: dup2: %s", strerror( (*__errno_location ()) ));
0
63 ));
never executed: fatal("ssh_askpass: dup2: %s", strerror( (*__errno_location ()) ));
0
64 execlp(askpass, askpass, msg, (char *)-
65 ((void *)0)-
66 );-
67 fatal("ssh_askpass: exec(%s): %s", askpass, strerror(-
68 (*__errno_location ())-
69 ));-
70 }
never executed: end of block
0
71 close(p[1]);-
72-
73 len = 0;-
74 do {-
75 ssize_t r = read(p[0], buf + len, sizeof(buf) - 1 - len);-
76-
77 if (r == -1
r == -1Description
TRUEnever evaluated
FALSEnever evaluated
&&
0
78 (*
(*__errno_location ()) == 4Description
TRUEnever evaluated
FALSEnever evaluated
__errno_location ())
(*__errno_location ()) == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
79 ==
(*__errno_location ()) == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
80 4
(*__errno_location ()) == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
81 )-
82 continue;
never executed: continue;
0
83 if (r <= 0
r <= 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
84 break;
never executed: break;
0
85 len += r;-
86 }
never executed: end of block
while (sizeof(buf) - 1 - len > 0
sizeof(buf) - 1 - len > 0Description
TRUEnever evaluated
FALSEnever evaluated
);
0
87 buf[len] = '\0';-
88-
89 close(p[0]);-
90 while ((
(ret = waitpid...tatus, 0)) < 0Description
TRUEnever evaluated
FALSEnever evaluated
ret = waitpid(pid, &status, 0)) < 0
(ret = waitpid...tatus, 0)) < 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
91 if (-
92 (*
(*__errno_location ()) != 4Description
TRUEnever evaluated
FALSEnever evaluated
__errno_location ())
(*__errno_location ()) != 4Description
TRUEnever evaluated
FALSEnever evaluated
0
93 !=
(*__errno_location ()) != 4Description
TRUEnever evaluated
FALSEnever evaluated
0
94 4
(*__errno_location ()) != 4Description
TRUEnever evaluated
FALSEnever evaluated
0
95 )-
96 break;
never executed: break;
0
97 mysignal(-
9817-
99,osigchld);-
100 if (ret == -1
ret == -1Description
TRUEnever evaluated
FALSEnever evaluated
|| !
! ((( status ) & 0x7f) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
101 (((
! ((( status ) & 0x7f) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
102 status
! ((( status ) & 0x7f) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
103 ) & 0x7f) == 0)
! ((( status ) & 0x7f) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
104 || -
105 (((
((( status ) &...00) >> 8) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
106 status
((( status ) &...00) >> 8) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
107 ) & 0xff00) >> 8)
((( status ) &...00) >> 8) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
108 != 0
((( status ) &...00) >> 8) != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
109 explicit_bzero(buf, sizeof(buf));-
110 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
111 ((void *)0)
never executed: return ((void *)0) ;
0
112 ;
never executed: return ((void *)0) ;
0
113 }-
114-
115 buf[-
116 __builtin_strcspn (-
117 buf-
118 , -
119 "\r\n"-
120 )-
121 ] = '\0';-
122 pass = xstrdup(buf);-
123 explicit_bzero(buf, sizeof(buf));-
124 return
never executed: return pass;
pass;
never executed: return pass;
0
125}-
126-
127-
128-
129-
130-
131-
132-
133char *-
134read_passphrase(const char *prompt, int flags)-
135{-
136 char *askpass = -
137 ((void *)0)-
138 , *ret, buf[1024];-
139 int rppflags, use_askpass = 0, ttyfd;-
140-
141 rppflags = (
(flags & 0x0001)Description
TRUEnever evaluated
FALSEnever evaluated
flags & 0x0001)
(flags & 0x0001)Description
TRUEnever evaluated
FALSEnever evaluated
? 0x01 : 0x00;
0
142 if (flags & 0x0008
flags & 0x0008Description
TRUEnever evaluated
FALSEnever evaluated
)
0
143 use_askpass = 1;
never executed: use_askpass = 1;
0
144 else if (flags & 0x0002
flags & 0x0002Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
145 if (!isatty(
!isatty( 0 )Description
TRUEnever evaluated
FALSEnever evaluated
0
146 0
!isatty( 0 )Description
TRUEnever evaluated
FALSEnever evaluated
0
147 )
!isatty( 0 )Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
148 debug("read_passphrase: stdin is not a tty");-
149 use_askpass = 1;-
150 }
never executed: end of block
0
151 }
never executed: end of block
else {
0
152 rppflags |= 0x02;-
153 ttyfd = open(-
154 "/dev/tty"-
155 , -
156 02-
157 );-
158 if (ttyfd >= 0
ttyfd >= 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
159 close(ttyfd);
never executed: close(ttyfd);
0
160 else {-
161 debug("read_passphrase: can't open %s: %s", -
162 "/dev/tty"-
163 ,-
164 strerror(-
165 (*__errno_location ())-
166 ));-
167 use_askpass = 1;-
168 }
never executed: end of block
0
169 }-
170-
171 if ((
(flags & 0x0008)Description
TRUEnever evaluated
FALSEnever evaluated
flags & 0x0008)
(flags & 0x0008)Description
TRUEnever evaluated
FALSEnever evaluated
&& getenv("DISPLAY") ==
getenv("DISPLA...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
172 ((void *)0)
getenv("DISPLA...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
173 )-
174 return
never executed: return (flags & 0x0004) ? ((void *)0) : xstrdup("");
(
(flags & 0x0004)Description
TRUEnever evaluated
FALSEnever evaluated
flags & 0x0004)
(flags & 0x0004)Description
TRUEnever evaluated
FALSEnever evaluated
?
never executed: return (flags & 0x0004) ? ((void *)0) : xstrdup("");
0
175 ((void *)0)
never executed: return (flags & 0x0004) ? ((void *)0) : xstrdup("");
0
176 : xstrdup("");
never executed: return (flags & 0x0004) ? ((void *)0) : xstrdup("");
0
177-
178 if (use_askpass
use_askpassDescription
TRUEnever evaluated
FALSEnever evaluated
&& getenv("DISPLAY")
getenv("DISPLAY")Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
179 if (getenv("SSH_ASKPASS")
getenv("SSH_ASKPASS")Description
TRUEnever evaluated
FALSEnever evaluated
)
0
180 askpass = getenv("SSH_ASKPASS");
never executed: askpass = getenv("SSH_ASKPASS");
0
181 else-
182 askpass = "/var/tmp/openssh-test/libexec/ssh-askpass";
never executed: askpass = "/var/tmp/openssh-test/libexec/ssh-askpass";
0
183 if ((
(ret = ssh_ask...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
ret = ssh_askpass(askpass, prompt)) ==
(ret = ssh_ask...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
184 ((void *)0)
(ret = ssh_ask...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
185 )-
186 if (!(flags & 0x0004)
!(flags & 0x0004)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
187 return
never executed: return xstrdup("");
xstrdup("");
never executed: return xstrdup("");
0
188 return
never executed: return ret;
ret;
never executed: return ret;
0
189 }-
190-
191 if (readpassphrase(prompt, buf, sizeof buf, rppflags) ==
readpassphrase...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
192 ((void *)0)
readpassphrase...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
193 ) {-
194 if (flags & 0x0004
flags & 0x0004Description
TRUEnever evaluated
FALSEnever evaluated
)
0
195 return
never executed: return ((void *)0) ;
never executed: return ((void *)0) ;
0
196 ((void *)0)
never executed: return ((void *)0) ;
0
197 ;
never executed: return ((void *)0) ;
0
198 return
never executed: return xstrdup("");
xstrdup("");
never executed: return xstrdup("");
0
199 }-
200-
201 ret = xstrdup(buf);-
202 explicit_bzero(buf, sizeof(buf));-
203 return
never executed: return ret;
ret;
never executed: return ret;
0
204}-
205-
206int-
207ask_permission(const char *fmt, ...)-
208{-
209 va_list args;-
210 char *p, prompt[1024];-
211 int allowed = 0;-
212-
213 -
214__builtin_va_start(-
215args-
216,-
217fmt-
218)-
219 ;-
220 vsnprintf(prompt, sizeof(prompt), fmt, args);-
221 -
222__builtin_va_end(-
223args-
224)-
225 ;-
226-
227 p = read_passphrase(prompt, 0x0008|0x0004);-
228 if (p !=
p != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
229 ((void *)0)
p != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
230 ) {-
231-
232-
233-
234-
235 if (*
*p == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
p == '\0'
*p == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
|| *
*p == '\n'Description
TRUEnever evaluated
FALSEnever evaluated
p == '\n'
*p == '\n'Description
TRUEnever evaluated
FALSEnever evaluated
||
0
236 strcasecmp(p, "yes") == 0
strcasecmp(p, "yes") == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
237 allowed = 1;
never executed: allowed = 1;
0
238 free(p);-
239 }
never executed: end of block
0
240-
241 return
never executed: return (allowed);
(allowed);
never executed: return (allowed);
0
242}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2