TLS 1.3 PSK 会话恢复: NewSessionTicket 签发/解析、ticket+binder 校验、selected_identity 回选、恢复握手免证书(pazessl -sess_in/-sess_out 端到端验证); 构建脚本输出 bin/ 并支持独立命令与 psftp; 修复 SFTP 二进制传输与 copy_id -P; 补充 tests/ 调试与 verify_tls
66 行
2.2 KiB
C
66 行
2.2 KiB
C
/* standalone.c —— 独立命令入口 (pscp/pkeygen/pkeyscan/pcopy-id/pagent/padd/psshd)
|
|
*
|
|
* 根据可执行文件名决定命令名:去掉首字母 'p' (pscp → scp, pcopy-id → copy-id),
|
|
* 以 pssh 子命令风格调用对应实现 (pssh_cmd_*)。pssh.exe 内的子命令行为一致。
|
|
*/
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
int pssh_cmd_ssh(int argc, char **argv);
|
|
int pssh_cmd_keygen(int argc, char **argv);
|
|
int pssh_cmd_keyscan(int argc, char **argv);
|
|
int pssh_cmd_copyid(int argc, char **argv);
|
|
int pssh_cmd_agent(int argc, char **argv);
|
|
int pssh_cmd_add(int argc, char **argv);
|
|
int pssh_cmd_scp(int argc, char **argv);
|
|
int pssh_cmd_sshd(int argc, char **argv);
|
|
|
|
static const char *exe_base(const char *p) {
|
|
const char *last = p;
|
|
for (const char *q = p; *q; q++)
|
|
if (*q == '/' || *q == '\\') last = q + 1;
|
|
return last;
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
#ifdef _WIN32
|
|
SetConsoleOutputCP(CP_UTF8);
|
|
#endif
|
|
const char *exe = exe_base(argv[0]);
|
|
size_t n = strlen(exe);
|
|
if (n > 4 && strcmp(exe + n - 4, ".exe") == 0) n -= 4;
|
|
if (n < 2 || n >= sizeof(char[64])) {
|
|
fprintf(stderr, "无法识别命令名\n");
|
|
return 1;
|
|
}
|
|
/* pXxx → xxx */
|
|
char cmd[64];
|
|
if (exe[0] == 'p' || exe[0] == 'P') {
|
|
memcpy(cmd, exe + 1, n - 1);
|
|
cmd[n - 1] = '\0';
|
|
} else {
|
|
memcpy(cmd, exe, n);
|
|
cmd[n] = '\0';
|
|
}
|
|
|
|
const char *av[64];
|
|
int cnt = argc < 63 ? argc : 63;
|
|
for (int i = 0; i < cnt; i++) av[i] = argv[i];
|
|
av[0] = cmd;
|
|
|
|
if (strcmp(cmd, "scp") == 0) return pssh_cmd_scp(cnt, (char **)av);
|
|
if (strcmp(cmd, "keygen") == 0) return pssh_cmd_keygen(cnt, (char **)av);
|
|
if (strcmp(cmd, "keyscan") == 0) return pssh_cmd_keyscan(cnt, (char **)av);
|
|
if (strcmp(cmd, "copy-id") == 0) return pssh_cmd_copyid(cnt, (char **)av);
|
|
if (strcmp(cmd, "agent") == 0) return pssh_cmd_agent(cnt, (char **)av);
|
|
if (strcmp(cmd, "add") == 0) return pssh_cmd_add(cnt, (char **)av);
|
|
if (strcmp(cmd, "sshd") == 0) return pssh_cmd_sshd(cnt, (char **)av);
|
|
if (strcmp(cmd, "ssh") == 0) return pssh_cmd_ssh(cnt, (char **)av);
|
|
fprintf(stderr, "未知命令: p%s\n", cmd);
|
|
return 1;
|
|
}
|