| Line | Source | Count |
| 1 | | - |
| 2 | | - |
| 3 | | - |
| 4 | | - |
| 5 | | - |
| 6 | | - |
| 7 | | - |
| 8 | | - |
| 9 | | - |
| 10 | | - |
| 11 | | - |
| 12 | | - |
| 13 | extern char *__progname; | - |
| 14 | | - |
| 15 | | - |
| 16 | static char *default_files[] = { | - |
| 17 | | - |
| 18 | ".ssh" "/id_rsa", | - |
| 19 | ".ssh" "/id_dsa", | - |
| 20 | | - |
| 21 | ".ssh" "/id_ecdsa", | - |
| 22 | | - |
| 23 | | - |
| 24 | ".ssh" "/id_ed25519", | - |
| 25 | ".ssh" "/id_xmss", | - |
| 26 | | - |
| 27 | ((void *)0) | - |
| 28 | | - |
| 29 | }; | - |
| 30 | | - |
| 31 | static int fingerprint_hash = 2; | - |
| 32 | | - |
| 33 | | - |
| 34 | static int lifetime = 0; | - |
| 35 | | - |
| 36 | | - |
| 37 | static int confirm = 0; | - |
| 38 | | - |
| 39 | | - |
| 40 | static u_int maxsign = 0; | - |
| 41 | static u_int minleft = 0; | - |
| 42 | | - |
| 43 | | - |
| 44 | static char *pass = | - |
| 45 | ((void *)0) | - |
| 46 | ; | - |
| 47 | static void | - |
| 48 | clear_pass(void) | - |
| 49 | { | - |
| 50 | if (pass| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 51 | explicit_bzero(pass, strlen(pass)); | - |
| 52 | free(pass); | - |
| 53 | pass = | - |
| 54 | ((void *)0) | - |
| 55 | ; | - |
| 56 | } never executed: end of block | 0 |
| 57 | } never executed: end of block | 0 |
| 58 | | - |
| 59 | static int | - |
| 60 | delete_file(int agent_fd, const char *filename, int key_only, int qflag) | - |
| 61 | { | - |
| 62 | struct sshkey *public, *cert = | - |
| 63 | ((void *)0) | - |
| 64 | ; | - |
| 65 | char *certpath = | - |
| 66 | ((void *)0) | - |
| 67 | , *comment = | - |
| 68 | ((void *)0) | - |
| 69 | ; | - |
| 70 | int r, ret = -1; | - |
| 71 | | - |
| 72 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_load_public(filename, &public, &comment)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 73 | printf("Bad key file %s: %s\n", filename, ssh_err(r)); | - |
| 74 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 75 | } | - |
| 76 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_remove_identity(agent_fd, public)) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 77 | if (!qflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 78 | fprintf( | - |
| 79 | stderr | - |
| 80 | , "Identity removed: %s (%s)\n", | - |
| 81 | filename, comment); | - |
| 82 | } never executed: end of block | 0 |
| 83 | ret = 0; | - |
| 84 | } never executed: end of block else | 0 |
| 85 | fprintf( never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", filename, ssh_err(r)); | 0 |
| 86 | stderr never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", filename, ssh_err(r)); | 0 |
| 87 | , "Could not remove identity \"%s\": %s\n", never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", filename, ssh_err(r)); | 0 |
| 88 | filename, ssh_err(r)); never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", filename, ssh_err(r)); | 0 |
| 89 | | - |
| 90 | if (key_only| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 91 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 92 | | - |
| 93 | | - |
| 94 | free(comment); | - |
| 95 | comment = | - |
| 96 | ((void *)0) | - |
| 97 | ; | - |
| 98 | xasprintf(&certpath, "%s-cert.pub", filename); | - |
| 99 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_load_public(certpath, &cert, &comment)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 100 | if (r != -24| TRUE | never evaluated | | FALSE | never evaluated |
|| | 0 |
| 101 | (*| TRUE | never evaluated | | FALSE | never evaluated |
__errno_location ()) | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 102 | != | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 103 | 2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 104 | ) | - |
| 105 | error("Failed to load certificate \"%s\": %s", never executed: error("Failed to load certificate \"%s\": %s", certpath, ssh_err(r)); | 0 |
| 106 | certpath, ssh_err(r)); never executed: error("Failed to load certificate \"%s\": %s", certpath, ssh_err(r)); | 0 |
| 107 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 108 | } | - |
| 109 | | - |
| 110 | if (!sshkey_equal_public(cert, public)| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 111 | fatal("Certificate %s does not match private key %s", never executed: fatal("Certificate %s does not match private key %s", certpath, filename); | 0 |
| 112 | certpath, filename); never executed: fatal("Certificate %s does not match private key %s", certpath, filename); | 0 |
| 113 | | - |
| 114 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_remove_identity(agent_fd, cert)) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 115 | if (!qflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 116 | fprintf( | - |
| 117 | stderr | - |
| 118 | , "Identity removed: %s (%s)\n", | - |
| 119 | certpath, comment); | - |
| 120 | } never executed: end of block | 0 |
| 121 | ret = 0; | - |
| 122 | } never executed: end of block else | 0 |
| 123 | fprintf( never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", certpath, ssh_err(r)); | 0 |
| 124 | stderr never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", certpath, ssh_err(r)); | 0 |
| 125 | , "Could not remove identity \"%s\": %s\n", never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", certpath, ssh_err(r)); | 0 |
| 126 | certpath, ssh_err(r)); never executed: fprintf( stderr , "Could not remove identity \"%s\": %s\n", certpath, ssh_err(r)); | 0 |
| 127 | | - |
| 128 | out: code before this statement never executed: out: | 0 |
| 129 | sshkey_free(cert); | - |
| 130 | sshkey_free(public); | - |
| 131 | free(certpath); | - |
| 132 | free(comment); | - |
| 133 | | - |
| 134 | return never executed: return ret; ret;never executed: return ret; | 0 |
| 135 | } | - |
| 136 | | - |
| 137 | | - |
| 138 | static int | - |
| 139 | delete_all(int agent_fd, int qflag) | - |
| 140 | { | - |
| 141 | int ret = -1; | - |
| 142 | | - |
| 143 | | - |
| 144 | | - |
| 145 | | - |
| 146 | | - |
| 147 | | - |
| 148 | if (ssh_remove_all_identities(agent_fd, 2) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 149 | ret = 0; never executed: ret = 0; | 0 |
| 150 | | - |
| 151 | ssh_remove_all_identities(agent_fd, 1); | - |
| 152 | | - |
| 153 | if (ret != 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 154 | fprintf( never executed: fprintf( stderr , "Failed to remove all identities.\n"); | 0 |
| 155 | stderr never executed: fprintf( stderr , "Failed to remove all identities.\n"); | 0 |
| 156 | , "Failed to remove all identities.\n"); never executed: fprintf( stderr , "Failed to remove all identities.\n"); | 0 |
| 157 | else if (!qflag| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 158 | fprintf( never executed: fprintf( stderr , "All identities removed.\n"); | 0 |
| 159 | stderr never executed: fprintf( stderr , "All identities removed.\n"); | 0 |
| 160 | , "All identities removed.\n"); never executed: fprintf( stderr , "All identities removed.\n"); | 0 |
| 161 | | - |
| 162 | return never executed: return ret; ret;never executed: return ret; | 0 |
| 163 | } | - |
| 164 | | - |
| 165 | static int | - |
| 166 | add_file(int agent_fd, const char *filename, int key_only, int qflag) | - |
| 167 | { | - |
| 168 | struct sshkey *private, *cert; | - |
| 169 | char *comment = | - |
| 170 | ((void *)0) | - |
| 171 | ; | - |
| 172 | char msg[1024], *certpath = | - |
| 173 | ((void *)0) | - |
| 174 | ; | - |
| 175 | int r, fd, ret = -1; | - |
| 176 | size_t i; | - |
| 177 | u_int32_t left; | - |
| 178 | struct sshbuf *keyblob; | - |
| 179 | struct ssh_identitylist *idlist; | - |
| 180 | | - |
| 181 | if ( | - |
| 182 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 183 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 184 | ) && __builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 185 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 186 | ) && (__s1_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 187 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 188 | ), __s2_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 189 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 190 | ), (!((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 191 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 192 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 193 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 194 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 195 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 196 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 197 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 198 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 199 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 200 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 201 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 202 | ) : (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 203 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 204 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 205 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 206 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 207 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 208 | ) == 1) && (__s1_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 209 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 210 | ), __s1_len < 4) ? (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 211 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 212 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 213 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 214 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 215 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 216 | ) == 1) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 217 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 218 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 219 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 220 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 221 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 222 | ); int __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 223 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 224 | ))[0] - __s2[0]); if (__s1_len > 0| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 225 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 226 | ))[1] - __s2[1]); if (__s1_len > 1| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 227 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 228 | ))[2] - __s2[2]); if (__s1_len > 2| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( filename ))[3] - __s2[3]); | 0 |
| 229 | filename| TRUE | never evaluated | | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( filename ))[3] - __s2[3]); | 0 |
| 230 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 231 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 232 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 233 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 234 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 235 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 236 | ) == 1) && (__s2_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 237 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 238 | ), __s2_len < 4) ? (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 239 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 240 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 241 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 242 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 243 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 244 | ) == 1) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 245 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 246 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 247 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 248 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 249 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 250 | ); int __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 251 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 252 | ))[0] - __s2[0]); if (__s2_len > 0| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 253 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 254 | ))[1] - __s2[1]); if (__s2_len > 1| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 255 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 256 | ))[2] - __s2[2]); if (__s2_len > 2| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]); | 0 |
| 257 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]); | 0 |
| 258 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 259 | filename| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 260 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 261 | "-"| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 262 | )))); }) | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 263 | == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 264 | fd = | - |
| 265 | 0 | - |
| 266 | ; | - |
| 267 | filename = "(stdin)"; | - |
| 268 | } never executed: end of block else if ((| TRUE | never evaluated | | FALSE | never evaluated |
fd = open(filename, | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 269 | 00| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 270 | )) < 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 271 | perror(filename); | - |
| 272 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 273 | } | - |
| 274 | | - |
| 275 | | - |
| 276 | | - |
| 277 | | - |
| 278 | | - |
| 279 | if (fd != | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 280 | 0| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 281 | ) { | - |
| 282 | if (sshkey_perm_ok(fd, filename) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 283 | close(fd); | - |
| 284 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 285 | } | - |
| 286 | } never executed: end of block | 0 |
| 287 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
keyblob = sshbuf_new()) == | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 288 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 289 | ) | - |
| 290 | fatal("%s: sshbuf_new failed", __func__); never executed: fatal("%s: sshbuf_new failed", __func__); | 0 |
| 291 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_load_file(fd, keyblob)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 292 | fprintf( | - |
| 293 | stderr | - |
| 294 | , "Error loading key \"%s\": %s\n", | - |
| 295 | filename, ssh_err(r)); | - |
| 296 | sshbuf_free(keyblob); | - |
| 297 | close(fd); | - |
| 298 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 299 | } | - |
| 300 | close(fd); | - |
| 301 | | - |
| 302 | | - |
| 303 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_parse_private_fileblob(keyblob, "", &private,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 304 | &comment)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
&& r != -43| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 305 | fprintf( | - |
| 306 | stderr | - |
| 307 | , "Error loading key \"%s\": %s\n", | - |
| 308 | filename, ssh_err(r)); | - |
| 309 | goto never executed: goto fail_load; fail_load;never executed: goto fail_load; | 0 |
| 310 | } | - |
| 311 | | - |
| 312 | if (private| TRUE | never evaluated | | FALSE | never evaluated |
== | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 313 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 314 | && pass != | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 315 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 316 | ) { | - |
| 317 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_parse_private_fileblob(keyblob, pass, &private,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 318 | &comment)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
&& r != -43| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 319 | fprintf( | - |
| 320 | stderr | - |
| 321 | , "Error loading key \"%s\": %s\n", | - |
| 322 | filename, ssh_err(r)); | - |
| 323 | goto never executed: goto fail_load; fail_load;never executed: goto fail_load; | 0 |
| 324 | } | - |
| 325 | } never executed: end of block | 0 |
| 326 | if (private| TRUE | never evaluated | | FALSE | never evaluated |
== | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 327 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 328 | ) { | - |
| 329 | | - |
| 330 | clear_pass(); | - |
| 331 | snprintf(msg, sizeof msg, "Enter passphrase for %s%s: ", | - |
| 332 | filename, confirm ? " (will confirm each use)" : ""); | - |
| 333 | for (;;) { | - |
| 334 | pass = read_passphrase(msg, 0x0002); | - |
| 335 | if ( | - |
| 336 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 337 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 338 | ) && __builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 339 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 340 | ) && (__s1_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 341 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 342 | ), __s2_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 343 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 344 | ), (!((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 345 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 346 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 347 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 348 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 349 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 350 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 351 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 352 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 353 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 354 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 355 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 356 | ) : (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 357 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 358 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 359 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 360 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 361 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 362 | ) == 1) && (__s1_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 363 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 364 | ), __s1_len < 4) ? (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 365 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 366 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 367 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 368 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 369 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 370 | ) == 1) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 371 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 372 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 373 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 374 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 375 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 376 | ); int __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 377 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 378 | ))[0] - __s2[0]); if (__s1_len > 0| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 379 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 380 | ))[1] - __s2[1]); if (__s1_len > 1| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 381 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 382 | ))[2] - __s2[2]); if (__s1_len > 2| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( pass ))[3] - __s2[3]); | 0 |
| 383 | pass| TRUE | never evaluated | | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( pass ))[3] - __s2[3]); | 0 |
| 384 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 385 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 386 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 387 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 388 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 389 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 390 | ) == 1) && (__s2_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 391 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 392 | ), __s2_len < 4) ? (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 393 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 394 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 395 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 396 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 397 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 398 | ) == 1) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 399 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 400 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 401 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 402 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 403 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 404 | ); int __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 405 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 406 | ))[0] - __s2[0]); if (__s2_len > 0| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 407 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 408 | ))[1] - __s2[1]); if (__s2_len > 1| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 409 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 410 | ))[2] - __s2[2]); if (__s2_len > 2| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( "" ))[3] - __s2[3]); | 0 |
| 411 | ""| TRUE | never evaluated | | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( "" ))[3] - __s2[3]); | 0 |
| 412 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 413 | pass| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 414 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 415 | ""| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 416 | )))); }) | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 417 | == 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 418 | goto never executed: goto fail_load; fail_load;never executed: goto fail_load; | 0 |
| 419 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_parse_private_fileblob(keyblob, pass,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 420 | &private, &comment)) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 421 | break; never executed: break; | 0 |
| 422 | else if (r != -43| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 423 | fprintf( | - |
| 424 | stderr | - |
| 425 | , | - |
| 426 | "Error loading key \"%s\": %s\n", | - |
| 427 | filename, ssh_err(r)); | - |
| 428 | fail_load: code before this statement never executed: fail_load: | 0 |
| 429 | clear_pass(); | - |
| 430 | sshbuf_free(keyblob); | - |
| 431 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 432 | } | - |
| 433 | clear_pass(); | - |
| 434 | snprintf(msg, sizeof msg, | - |
| 435 | "Bad passphrase, try again for %s%s: ", filename, | - |
| 436 | confirm ? " (will confirm each use)" : ""); | - |
| 437 | } never executed: end of block | 0 |
| 438 | } never executed: end of block | 0 |
| 439 | if (comment == | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 440 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 441 | || *| TRUE | never evaluated | | FALSE | never evaluated |
comment == '\0'| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 442 | comment = xstrdup(filename); never executed: comment = xstrdup(filename); | 0 |
| 443 | sshbuf_free(keyblob); | - |
| 444 | | - |
| 445 | | - |
| 446 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_set_filename(private, filename)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 447 | fprintf( | - |
| 448 | stderr | - |
| 449 | , "Could not add filename to private key: %s (%s)\n", | - |
| 450 | filename, comment); | - |
| 451 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 452 | } | - |
| 453 | if (maxsign| TRUE | never evaluated | | FALSE | never evaluated |
&& minleft| TRUE | never evaluated | | FALSE | never evaluated |
&& | 0 |
| 454 | (| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_fetch_identitylist(agent_fd, &idlist)) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 455 | for (i = 0; i < idlist->nkeys| TRUE | never evaluated | | FALSE | never evaluated |
; i++) { | 0 |
| 456 | if (!sshkey_equal_public(idlist->keys[i], private)| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 457 | continue; never executed: continue; | 0 |
| 458 | left = sshkey_signatures_left(idlist->keys[i]); | - |
| 459 | if (left < minleft| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 460 | fprintf( | - |
| 461 | stderr | - |
| 462 | , | - |
| 463 | "Only %d signatures left.\n", left); | - |
| 464 | break; never executed: break; | 0 |
| 465 | } | - |
| 466 | fprintf( | - |
| 467 | stderr | - |
| 468 | , "Skipping update: "); | - |
| 469 | if (left == minleft| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 470 | fprintf( | - |
| 471 | stderr | - |
| 472 | , | - |
| 473 | "required signatures left (%d).\n", left); | - |
| 474 | } never executed: end of block else { | 0 |
| 475 | fprintf( | - |
| 476 | stderr | - |
| 477 | , | - |
| 478 | "more signatures left (%d) than" | - |
| 479 | " required (%d).\n", left, minleft); | - |
| 480 | } never executed: end of block | 0 |
| 481 | ssh_free_identitylist(idlist); | - |
| 482 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 483 | } | - |
| 484 | ssh_free_identitylist(idlist); | - |
| 485 | } never executed: end of block | 0 |
| 486 | | - |
| 487 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_add_identity_constrained(agent_fd, private, comment,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 488 | lifetime, confirm, maxsign)) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 489 | ret = 0; | - |
| 490 | if (!qflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 491 | fprintf( | - |
| 492 | stderr | - |
| 493 | , "Identity added: %s (%s)\n", | - |
| 494 | filename, comment); | - |
| 495 | if (lifetime != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 496 | fprintf( | - |
| 497 | stderr | - |
| 498 | , | - |
| 499 | "Lifetime set to %d seconds\n", lifetime); | - |
| 500 | } never executed: end of block | 0 |
| 501 | if (confirm != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 502 | fprintf( | - |
| 503 | stderr | - |
| 504 | , "The user must confirm " | - |
| 505 | "each use of the key\n"); | - |
| 506 | } never executed: end of block | 0 |
| 507 | } never executed: end of block | 0 |
| 508 | } never executed: end of block else { | 0 |
| 509 | fprintf( | - |
| 510 | stderr | - |
| 511 | , "Could not add identity \"%s\": %s\n", | - |
| 512 | filename, ssh_err(r)); | - |
| 513 | } never executed: end of block | 0 |
| 514 | | - |
| 515 | | - |
| 516 | if (key_only| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 517 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 518 | | - |
| 519 | | - |
| 520 | xasprintf(&certpath, "%s-cert.pub", filename); | - |
| 521 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_load_public(certpath, &cert, | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 522 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 523 | )) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 524 | if (r != -24| TRUE | never evaluated | | FALSE | never evaluated |
|| | 0 |
| 525 | (*| TRUE | never evaluated | | FALSE | never evaluated |
__errno_location ()) | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 526 | != | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 527 | 2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 528 | ) | - |
| 529 | error("Failed to load certificate \"%s\": %s", never executed: error("Failed to load certificate \"%s\": %s", certpath, ssh_err(r)); | 0 |
| 530 | certpath, ssh_err(r)); never executed: error("Failed to load certificate \"%s\": %s", certpath, ssh_err(r)); | 0 |
| 531 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 532 | } | - |
| 533 | | - |
| 534 | if (!sshkey_equal_public(cert, private)| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 535 | error("Certificate %s does not match private key %s", | - |
| 536 | certpath, filename); | - |
| 537 | sshkey_free(cert); | - |
| 538 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 539 | } | - |
| 540 | | - |
| 541 | | - |
| 542 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_to_certified(private)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 543 | error("%s: sshkey_to_certified: %s", __func__, ssh_err(r)); | - |
| 544 | sshkey_free(cert); | - |
| 545 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 546 | } | - |
| 547 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_cert_copy(cert, private)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 548 | error("%s: sshkey_cert_copy: %s", __func__, ssh_err(r)); | - |
| 549 | sshkey_free(cert); | - |
| 550 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 551 | } | - |
| 552 | sshkey_free(cert); | - |
| 553 | | - |
| 554 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_add_identity_constrained(agent_fd, private, comment,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 555 | lifetime, confirm, maxsign)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 556 | error("Certificate %s (%s) add failed: %s", certpath, | - |
| 557 | private->cert->key_id, ssh_err(r)); | - |
| 558 | goto never executed: goto out; out;never executed: goto out; | 0 |
| 559 | } | - |
| 560 | | - |
| 561 | if (!qflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 562 | fprintf( | - |
| 563 | stderr | - |
| 564 | , "Certificate added: %s (%s)\n", certpath, | - |
| 565 | private->cert->key_id); | - |
| 566 | if (lifetime != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 567 | fprintf( | - |
| 568 | stderr | - |
| 569 | , "Lifetime set to %d seconds\n", | - |
| 570 | lifetime); | - |
| 571 | } never executed: end of block | 0 |
| 572 | if (confirm != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 573 | fprintf( | - |
| 574 | stderr | - |
| 575 | , "The user must confirm each use " | - |
| 576 | "of the key\n"); | - |
| 577 | } never executed: end of block | 0 |
| 578 | } never executed: end of block | 0 |
| 579 | | - |
| 580 | out: code before this statement never executed: out: | 0 |
| 581 | free(certpath); | - |
| 582 | free(comment); | - |
| 583 | sshkey_free(private); | - |
| 584 | | - |
| 585 | return never executed: return ret; ret;never executed: return ret; | 0 |
| 586 | } | - |
| 587 | | - |
| 588 | static int | - |
| 589 | update_card(int agent_fd, int add, const char *id, int qflag) | - |
| 590 | { | - |
| 591 | char *pin = | - |
| 592 | ((void *)0) | - |
| 593 | ; | - |
| 594 | int r, ret = -1; | - |
| 595 | | - |
| 596 | if (add| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 597 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
pin = read_passphrase("Enter passphrase for PKCS#11: ",| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 598 | 0x0002)) == | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 599 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 600 | ) | - |
| 601 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 602 | } never executed: end of block | 0 |
| 603 | | - |
| 604 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_update_card(agent_fd, add, id, pin == | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 605 | ((void *)0) | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 606 | ? "" : pin,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 607 | lifetime, confirm)) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 608 | ret = 0; | - |
| 609 | if (!qflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 610 | fprintf( | - |
| 611 | stderr | - |
| 612 | , "Card %s: %s\n", | - |
| 613 | add ? "added" : "removed", id); | - |
| 614 | } never executed: end of block | 0 |
| 615 | } never executed: end of block else { | 0 |
| 616 | fprintf( | - |
| 617 | stderr | - |
| 618 | , "Could not %s card \"%s\": %s\n", | - |
| 619 | add ? "add" : "remove", id, ssh_err(r)); | - |
| 620 | ret = -1; | - |
| 621 | } never executed: end of block | 0 |
| 622 | free(pin); | - |
| 623 | return never executed: return ret; ret;never executed: return ret; | 0 |
| 624 | } | - |
| 625 | | - |
| 626 | static int | - |
| 627 | list_identities(int agent_fd, int do_fp) | - |
| 628 | { | - |
| 629 | char *fp; | - |
| 630 | int r; | - |
| 631 | struct ssh_identitylist *idlist; | - |
| 632 | u_int32_t left; | - |
| 633 | size_t i; | - |
| 634 | | - |
| 635 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_fetch_identitylist(agent_fd, &idlist)) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 636 | if (r != -48| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 637 | fprintf( never executed: fprintf( stderr , "error fetching identities: %s\n", ssh_err(r)); | 0 |
| 638 | stderr never executed: fprintf( stderr , "error fetching identities: %s\n", ssh_err(r)); | 0 |
| 639 | , "error fetching identities: %s\n", never executed: fprintf( stderr , "error fetching identities: %s\n", ssh_err(r)); | 0 |
| 640 | ssh_err(r)); never executed: fprintf( stderr , "error fetching identities: %s\n", ssh_err(r)); | 0 |
| 641 | else | - |
| 642 | printf("The agent has no identities.\n"); never executed: printf("The agent has no identities.\n"); | 0 |
| 643 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 644 | } | - |
| 645 | for (i = 0; i < idlist->nkeys| TRUE | never evaluated | | FALSE | never evaluated |
; i++) { | 0 |
| 646 | if (do_fp| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 647 | fp = sshkey_fingerprint(idlist->keys[i], | - |
| 648 | fingerprint_hash, SSH_FP_DEFAULT); | - |
| 649 | printf("%u %s %s (%s)\n", sshkey_size(idlist->keys[i]), | - |
| 650 | fp == | - |
| 651 | ((void *)0) | - |
| 652 | ? "(null)" : fp, idlist->comments[i], | - |
| 653 | sshkey_type(idlist->keys[i])); | - |
| 654 | free(fp); | - |
| 655 | } never executed: end of block else { | 0 |
| 656 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = sshkey_write(idlist->keys[i], | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 657 | stdout| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 658 | )) != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 659 | fprintf( | - |
| 660 | stderr | - |
| 661 | , "sshkey_write: %s\n", | - |
| 662 | ssh_err(r)); | - |
| 663 | continue; never executed: continue; | 0 |
| 664 | } | - |
| 665 | fprintf( | - |
| 666 | stdout | - |
| 667 | , " %s", idlist->comments[i]); | - |
| 668 | left = sshkey_signatures_left(idlist->keys[i]); | - |
| 669 | if (left > 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 670 | fprintf( never executed: fprintf( stdout , " [signatures left %d]", left); | 0 |
| 671 | stdout never executed: fprintf( stdout , " [signatures left %d]", left); | 0 |
| 672 | , never executed: fprintf( stdout , " [signatures left %d]", left); | 0 |
| 673 | " [signatures left %d]", left); never executed: fprintf( stdout , " [signatures left %d]", left); | 0 |
| 674 | fprintf( | - |
| 675 | stdout | - |
| 676 | , "\n"); | - |
| 677 | } never executed: end of block | 0 |
| 678 | } | - |
| 679 | ssh_free_identitylist(idlist); | - |
| 680 | return never executed: return 0; 0;never executed: return 0; | 0 |
| 681 | } | - |
| 682 | | - |
| 683 | static int | - |
| 684 | lock_agent(int agent_fd, int lock) | - |
| 685 | { | - |
| 686 | char prompt[100], *p1, *p2; | - |
| 687 | int r, passok = 1, ret = -1; | - |
| 688 | | - |
| 689 | strlcpy(prompt, "Enter lock password: ", sizeof(prompt)); | - |
| 690 | p1 = read_passphrase(prompt, 0x0002); | - |
| 691 | if (lock| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 692 | strlcpy(prompt, "Again: ", sizeof prompt); | - |
| 693 | p2 = read_passphrase(prompt, 0x0002); | - |
| 694 | if ( | - |
| 695 | __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 696 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 697 | ) && __builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 698 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 699 | ) && (__s1_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 700 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 701 | ), __s2_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 702 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 703 | ), (!((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 704 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 705 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 706 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 707 | ) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 708 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 709 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 710 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 711 | ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 712 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 713 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 714 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 715 | ) : (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 716 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 717 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 718 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 719 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 720 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 721 | ) == 1) && (__s1_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 722 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 723 | ), __s1_len < 4) ? (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 724 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 725 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 726 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 727 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 728 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 729 | ) == 1) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 730 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 731 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 732 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 733 | ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 734 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 735 | ); int __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 736 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 737 | ))[0] - __s2[0]); if (__s1_len > 0| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 738 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 739 | ))[1] - __s2[1]); if (__s1_len > 1| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 740 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 741 | ))[2] - __s2[2]); if (__s1_len > 2| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( p1 ))[3] - __s2[3]); | 0 |
| 742 | p1| TRUE | never evaluated | | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( p1 ))[3] - __s2[3]); | 0 |
| 743 | ))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 744 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 745 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 746 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 747 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 748 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 749 | ) == 1) && (__s2_len = __builtin_strlen (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 750 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 751 | ), __s2_len < 4) ? (__builtin_constant_p (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 752 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 753 | ) && ((size_t)(const void *)((| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 754 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 755 | ) + 1) - (size_t)(const void *)(| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 756 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 757 | ) == 1) ? __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 758 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 759 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 760 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 761 | ) : -(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 762 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 763 | ); int __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 764 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 765 | ))[0] - __s2[0]); if (__s2_len > 0| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 766 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 767 | ))[1] - __s2[1]); if (__s2_len > 1| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { __result = (((const unsigned char *) (const char *) (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 768 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 769 | ))[2] - __s2[2]); if (__s2_len > 2| TRUE | never evaluated | | FALSE | never evaluated |
&& __result == 0| TRUE | never evaluated | | FALSE | never evaluated |
) __result = (((const unsigned char *) (const char *) (never executed: __result = (((const unsigned char *) (const char *) ( p2 ))[3] - __s2[3]); | 0 |
| 770 | p2| TRUE | never evaluated | | FALSE | never evaluated |
never executed: __result = (((const unsigned char *) (const char *) ( p2 ))[3] - __s2[3]); | 0 |
| 771 | ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp (| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 772 | p1| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 773 | , | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 774 | p2| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 775 | )))); }) | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 776 | != 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 777 | fprintf( | - |
| 778 | stderr | - |
| 779 | , "Passwords do not match.\n"); | - |
| 780 | passok = 0; | - |
| 781 | } never executed: end of block | 0 |
| 782 | explicit_bzero(p2, strlen(p2)); | - |
| 783 | free(p2); | - |
| 784 | } never executed: end of block | 0 |
| 785 | if (passok| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 786 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
r = ssh_lock_agent(agent_fd, lock, p1)) == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 787 | fprintf( | - |
| 788 | stderr | - |
| 789 | , "Agent %slocked.\n", lock ? "" : "un"); | - |
| 790 | ret = 0; | - |
| 791 | } never executed: end of block else { | 0 |
| 792 | fprintf( | - |
| 793 | stderr | - |
| 794 | , "Failed to %slock agent: %s\n", | - |
| 795 | lock ? "" : "un", ssh_err(r)); | - |
| 796 | } never executed: end of block | 0 |
| 797 | } | - |
| 798 | explicit_bzero(p1, strlen(p1)); | - |
| 799 | free(p1); | - |
| 800 | return never executed: return (ret); (ret);never executed: return (ret); | 0 |
| 801 | } | - |
| 802 | | - |
| 803 | static int | - |
| 804 | do_file(int agent_fd, int deleting, int key_only, char *file, int qflag) | - |
| 805 | { | - |
| 806 | if (deleting| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 807 | if (delete_file(agent_fd, file, key_only, qflag) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 808 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 809 | } never executed: end of block else { | 0 |
| 810 | if (add_file(agent_fd, file, key_only, qflag) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 811 | return never executed: return -1; -1;never executed: return -1; | 0 |
| 812 | } never executed: end of block | 0 |
| 813 | return never executed: return 0; 0;never executed: return 0; | 0 |
| 814 | } | - |
| 815 | | - |
| 816 | static void | - |
| 817 | usage(void) | - |
| 818 | { | - |
| 819 | fprintf( | - |
| 820 | stderr | - |
| 821 | , "usage: %s [options] [file ...]\n", __progname); | - |
| 822 | fprintf( | - |
| 823 | stderr | - |
| 824 | , "Options:\n"); | - |
| 825 | fprintf( | - |
| 826 | stderr | - |
| 827 | , " -l List fingerprints of all identities.\n"); | - |
| 828 | fprintf( | - |
| 829 | stderr | - |
| 830 | , " -E hash Specify hash algorithm used for fingerprints.\n"); | - |
| 831 | fprintf( | - |
| 832 | stderr | - |
| 833 | , " -L List public key parameters of all identities.\n"); | - |
| 834 | fprintf( | - |
| 835 | stderr | - |
| 836 | , " -k Load only keys and not certificates.\n"); | - |
| 837 | fprintf( | - |
| 838 | stderr | - |
| 839 | , " -c Require confirmation to sign using identities\n"); | - |
| 840 | fprintf( | - |
| 841 | stderr | - |
| 842 | , " -m minleft Maxsign is only changed if less than minleft are left (for XMSS)\n"); | - |
| 843 | fprintf( | - |
| 844 | stderr | - |
| 845 | , " -M maxsign Maximum number of signatures allowed (for XMSS)\n"); | - |
| 846 | fprintf( | - |
| 847 | stderr | - |
| 848 | , " -t life Set lifetime (in seconds) when adding identities.\n"); | - |
| 849 | fprintf( | - |
| 850 | stderr | - |
| 851 | , " -d Delete identity.\n"); | - |
| 852 | fprintf( | - |
| 853 | stderr | - |
| 854 | , " -D Delete all identities.\n"); | - |
| 855 | fprintf( | - |
| 856 | stderr | - |
| 857 | , " -x Lock agent.\n"); | - |
| 858 | fprintf( | - |
| 859 | stderr | - |
| 860 | , " -X Unlock agent.\n"); | - |
| 861 | fprintf( | - |
| 862 | stderr | - |
| 863 | , " -s pkcs11 Add keys from PKCS#11 provider.\n"); | - |
| 864 | fprintf( | - |
| 865 | stderr | - |
| 866 | , " -e pkcs11 Remove keys provided by PKCS#11 provider.\n"); | - |
| 867 | fprintf( | - |
| 868 | stderr | - |
| 869 | , " -q Be quiet after a successful operation.\n"); | - |
| 870 | } never executed: end of block | 0 |
| 871 | | - |
| 872 | int | - |
| 873 | main(int argc, char **argv) | - |
| 874 | { | - |
| 875 | extern char *BSDoptarg; | - |
| 876 | extern int BSDoptind; | - |
| 877 | int agent_fd; | - |
| 878 | char *pkcs11provider = | - |
| 879 | ((void *)0) | - |
| 880 | ; | - |
| 881 | int r, i, ch, deleting = 0, ret = 0, key_only = 0; | - |
| 882 | int xflag = 0, lflag = 0, Dflag = 0, qflag = 0; | - |
| 883 | | - |
| 884 | ssh_malloc_init(); | - |
| 885 | | - |
| 886 | sanitise_stdfd(); | - |
| 887 | | - |
| 888 | __progname = ssh_get_progname(argv[0]); | - |
| 889 | seed_rng(); | - |
| 890 | | - |
| 891 | | - |
| 892 | | - |
| 893 | OPENSSL_add_all_algorithms_noconf() | - |
| 894 | ; | - |
| 895 | | - |
| 896 | | - |
| 897 | setvbuf( | - |
| 898 | stdout | - |
| 899 | , | - |
| 900 | ((void *)0) | - |
| 901 | , | - |
| 902 | 1 | - |
| 903 | , 0); | - |
| 904 | | - |
| 905 | | - |
| 906 | switch (r = ssh_get_authentication_socket(&agent_fd)) { | - |
| 907 | case never executed: case 0: 0:never executed: case 0: | 0 |
| 908 | break; never executed: break; | 0 |
| 909 | case never executed: case -47: -47:never executed: case -47: | 0 |
| 910 | fprintf( | - |
| 911 | stderr | - |
| 912 | , "Could not open a connection to your " | - |
| 913 | "authentication agent.\n"); | - |
| 914 | exit(2); never executed: exit(2); | 0 |
| 915 | default never executed: default: :never executed: default: code before this statement never executed: default: | 0 |
| 916 | fprintf( | - |
| 917 | stderr | - |
| 918 | , "Error connecting to agent: %s\n", ssh_err(r)); | - |
| 919 | exit(2); never executed: exit(2); | 0 |
| 920 | } | - |
| 921 | | - |
| 922 | while ((| TRUE | never evaluated | | FALSE | never evaluated |
ch = BSDgetopt(argc, argv, "klLcdDxXE:e:M:m:qs:t:")) != -1| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 923 | switch (ch) { | - |
| 924 | case never executed: case 'E': 'E':never executed: case 'E': | 0 |
| 925 | fingerprint_hash = ssh_digest_alg_by_name(BSDoptarg); | - |
| 926 | if (fingerprint_hash == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 927 | fatal("Invalid hash algorithm \"%s\"", BSDoptarg); never executed: fatal("Invalid hash algorithm \"%s\"", BSDoptarg); | 0 |
| 928 | break; never executed: break; | 0 |
| 929 | case never executed: case 'k': 'k':never executed: case 'k': | 0 |
| 930 | key_only = 1; | - |
| 931 | break; never executed: break; | 0 |
| 932 | case never executed: case 'l': 'l':never executed: case 'l': | 0 |
| 933 | case never executed: case 'L': 'L':never executed: case 'L': | 0 |
| 934 | if (lflag != 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 935 | fatal("-%c flag already specified", lflag); never executed: fatal("-%c flag already specified", lflag); | 0 |
| 936 | lflag = ch; | - |
| 937 | break; never executed: break; | 0 |
| 938 | case never executed: case 'x': 'x':never executed: case 'x': | 0 |
| 939 | case never executed: case 'X': 'X':never executed: case 'X': | 0 |
| 940 | if (xflag != 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 941 | fatal("-%c flag already specified", xflag); never executed: fatal("-%c flag already specified", xflag); | 0 |
| 942 | xflag = ch; | - |
| 943 | break; never executed: break; | 0 |
| 944 | case never executed: case 'c': 'c':never executed: case 'c': | 0 |
| 945 | confirm = 1; | - |
| 946 | break; never executed: break; | 0 |
| 947 | case never executed: case 'm': 'm':never executed: case 'm': | 0 |
| 948 | minleft = (int)strtonum(BSDoptarg, 1, | - |
| 949 | (0x7fffffff * 2U + 1U) | - |
| 950 | , | - |
| 951 | ((void *)0) | - |
| 952 | ); | - |
| 953 | if (minleft == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 954 | usage(); | - |
| 955 | ret = 1; | - |
| 956 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 957 | } | - |
| 958 | break; never executed: break; | 0 |
| 959 | case never executed: case 'M': 'M':never executed: case 'M': | 0 |
| 960 | maxsign = (int)strtonum(BSDoptarg, 1, | - |
| 961 | (0x7fffffff * 2U + 1U) | - |
| 962 | , | - |
| 963 | ((void *)0) | - |
| 964 | ); | - |
| 965 | if (maxsign == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 966 | usage(); | - |
| 967 | ret = 1; | - |
| 968 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 969 | } | - |
| 970 | break; never executed: break; | 0 |
| 971 | case never executed: case 'd': 'd':never executed: case 'd': | 0 |
| 972 | deleting = 1; | - |
| 973 | break; never executed: break; | 0 |
| 974 | case never executed: case 'D': 'D':never executed: case 'D': | 0 |
| 975 | Dflag = 1; | - |
| 976 | break; never executed: break; | 0 |
| 977 | case never executed: case 's': 's':never executed: case 's': | 0 |
| 978 | pkcs11provider = BSDoptarg; | - |
| 979 | break; never executed: break; | 0 |
| 980 | case never executed: case 'e': 'e':never executed: case 'e': | 0 |
| 981 | deleting = 1; | - |
| 982 | pkcs11provider = BSDoptarg; | - |
| 983 | break; never executed: break; | 0 |
| 984 | case never executed: case 't': 't':never executed: case 't': | 0 |
| 985 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
lifetime = convtime(BSDoptarg)) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 986 | fprintf( | - |
| 987 | stderr | - |
| 988 | , "Invalid lifetime\n"); | - |
| 989 | ret = 1; | - |
| 990 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 991 | } | - |
| 992 | break; never executed: break; | 0 |
| 993 | case never executed: case 'q': 'q':never executed: case 'q': | 0 |
| 994 | qflag = 1; | - |
| 995 | break; never executed: break; | 0 |
| 996 | default never executed: default: :never executed: default: | 0 |
| 997 | usage(); | - |
| 998 | ret = 1; | - |
| 999 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 1000 | } | - |
| 1001 | } | - |
| 1002 | | - |
| 1003 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
xflag != 0) + (lflag != 0) + (Dflag != 0) > 1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1004 | fatal("Invalid combination of actions"); never executed: fatal("Invalid combination of actions"); | 0 |
| 1005 | else if (xflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 1006 | if (lock_agent(agent_fd, xflag == 'x' ? 1 : 0) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1007 | ret = 1; never executed: ret = 1; | 0 |
| 1008 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 1009 | } else if (lflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 1010 | if (list_identities(agent_fd, lflag == 'l' ? 1 : 0) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1011 | ret = 1; never executed: ret = 1; | 0 |
| 1012 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 1013 | } else if (Dflag| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 1014 | if (delete_all(agent_fd, qflag) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1015 | ret = 1; never executed: ret = 1; | 0 |
| 1016 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 1017 | } | - |
| 1018 | | - |
| 1019 | argc -= BSDoptind; | - |
| 1020 | argv += BSDoptind; | - |
| 1021 | if (pkcs11provider != | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 1022 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 1023 | ) { | - |
| 1024 | if (update_card(agent_fd, !deleting, pkcs11provider,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 1025 | qflag) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1026 | ret = 1; never executed: ret = 1; | 0 |
| 1027 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 1028 | } | - |
| 1029 | if (argc == 0| TRUE | never evaluated | | FALSE | never evaluated |
) { | 0 |
| 1030 | char buf[ | - |
| 1031 | 4096 | - |
| 1032 | ]; | - |
| 1033 | struct passwd *pw; | - |
| 1034 | struct stat st; | - |
| 1035 | int count = 0; | - |
| 1036 | | - |
| 1037 | if ((| TRUE | never evaluated | | FALSE | never evaluated |
pw = getpwuid(getuid())) == | TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 1038 | ((void *)0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 1039 | ) { | - |
| 1040 | fprintf( | - |
| 1041 | stderr | - |
| 1042 | , "No user found with uid %u\n", | - |
| 1043 | (u_int)getuid()); | - |
| 1044 | ret = 1; | - |
| 1045 | goto never executed: goto done; done;never executed: goto done; | 0 |
| 1046 | } | - |
| 1047 | | - |
| 1048 | for (i = 0; default_files[i]| TRUE | never evaluated | | FALSE | never evaluated |
; i++) { | 0 |
| 1049 | snprintf(buf, sizeof(buf), "%s/%s", pw->pw_dir, | - |
| 1050 | default_files[i]); | - |
| 1051 | if (stat(buf, &st) < 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1052 | continue; never executed: continue; | 0 |
| 1053 | if (do_file(agent_fd, deleting, key_only, buf,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 1054 | qflag) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1055 | ret = 1; never executed: ret = 1; | 0 |
| 1056 | else | - |
| 1057 | count++; never executed: count++; | 0 |
| 1058 | } | - |
| 1059 | if (count == 0| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1060 | ret = 1; never executed: ret = 1; | 0 |
| 1061 | } never executed: end of block else { | 0 |
| 1062 | for (i = 0; i < argc| TRUE | never evaluated | | FALSE | never evaluated |
; i++) { | 0 |
| 1063 | if (do_file(agent_fd, deleting, key_only,| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 1064 | argv[i], qflag) == -1| TRUE | never evaluated | | FALSE | never evaluated |
) | 0 |
| 1065 | ret = 1; never executed: ret = 1; | 0 |
| 1066 | } never executed: end of block | 0 |
| 1067 | } never executed: end of block | 0 |
| 1068 | clear_pass(); | - |
| 1069 | | - |
| 1070 | done: code before this statement never executed: done: | 0 |
| 1071 | ssh_close_authentication_socket(agent_fd); | - |
| 1072 | return never executed: return ret; ret;never executed: return ret; | 0 |
| 1073 | } | - |
| | |