| 1166 | } |
| 1167 | |
| 1168 | static enum ssh_variant determine_ssh_variant(const char *ssh_command, |
| 1169 | int is_cmdline) |
| 1170 | { |
| 1171 | enum ssh_variant ssh_variant = VARIANT_AUTO; |
| 1172 | const char *variant; |
| 1173 | char *p = NULL; |
| 1174 | |
| 1175 | override_ssh_variant(&ssh_variant); |
| 1176 | |
| 1177 | if (ssh_variant != VARIANT_AUTO) |
| 1178 | return ssh_variant; |
| 1179 | |
| 1180 | if (!is_cmdline) { |
| 1181 | p = xstrdup(ssh_command); |
| 1182 | variant = basename(p); |
| 1183 | } else { |
| 1184 | const char **ssh_argv; |
| 1185 | |
| 1186 | p = xstrdup(ssh_command); |
| 1187 | if (split_cmdline(p, &ssh_argv) > 0) { |
| 1188 | variant = basename((char *)ssh_argv[0]); |
| 1189 | /* |
| 1190 | * At this point, variant points into the buffer |
| 1191 | * referenced by p, hence we do not need ssh_argv |
| 1192 | * any longer. |
| 1193 | */ |
| 1194 | free(ssh_argv); |
| 1195 | } else { |
| 1196 | free(p); |
| 1197 | return ssh_variant; |
| 1198 | } |
| 1199 | } |
| 1200 | |
| 1201 | if (!strcasecmp(variant, "ssh") || |
| 1202 | !strcasecmp(variant, "ssh.exe")) |
| 1203 | ssh_variant = VARIANT_SSH; |
| 1204 | else if (!strcasecmp(variant, "plink") || |
| 1205 | !strcasecmp(variant, "plink.exe")) |
| 1206 | ssh_variant = VARIANT_PLINK; |
| 1207 | else if (!strcasecmp(variant, "tortoiseplink") || |
| 1208 | !strcasecmp(variant, "tortoiseplink.exe")) |
| 1209 | ssh_variant = VARIANT_TORTOISEPLINK; |
| 1210 | |
| 1211 | free(p); |
| 1212 | return ssh_variant; |
| 1213 | } |
| 1214 | |
| 1215 | /* |
| 1216 | * Open a connection using Git's native protocol. |
no test coverage detected