#ifndef FDPASS_H #define FDPASS_H #define PROTOCOL_VERSION "V2" #include int fdpass_receivefd(int sock); int fdpass_sendfd(int sock, int fd); int fdpass_splitbind (const char *s, SSTRING &name, SSTRING &port, SSTRING &logical_name); int fdpass_splitbind (const char *s, SSTRING &name, SSTRING &port); int fdpass_splitbind (const char *s, std::string &name, std::string &port, std::string &logical_name); int fdpass_splitbind (const char *s, std::string &name, std::string &port); int fdpass_sendfd2proxy (int fd1, int fd2, int fd_control, const char *description); void fdpass_setarg (_F_tlmpprogram___v2 *c); int fdpass_tcpconnect (const char *host, const char *port); int fdpass_tcpconnect_async (const char *host, const char *port); int fdpass_tcpconnect (const char *bind, bool transparent_mode, const char *host, const char *port); int fdpass_waitdata (int fd); int fdpass_okdata (int fd); void fdpass_closeall (int except_fd1, int except_fd2, int except_fd3); void fdpass_loop(int fd1, int fd2, int fdcheck, int do_not_close); void fdpass_loop(int fd1, int fd2, int do_not_close); struct DATEASC{ char buf[40]; DATEASC(){ buf[0] = '\0'; } }; void fdpass_asctime (time_t t, DATEASC &d); void fdpass_checkservice (const char *unixsocket); #include #include #include struct PROTOSTR{ std::string s; PROTOSTR (const char *ctl){ s = ctl; } const char *c_str() const { return s.c_str(); } }; extern PROTOSTR PROTO_REJECT; extern PROTOSTR PROTO_CONNECT_LINK; extern DEBUG_KEY D_EXTRA; int fdpass_findproc ( const char *unixpath, const char *from, const char *from_port, const char *to, const char *to_port, std::string &process, std::string &uid, std::string &gid, std::string &xid, std::string &env); class TCPSERVER_V1; int fdpass_setcontrol (TCPSERVER_V1 &o, const char *control, const char *user); int fdpass_checksign (const char *line, const char *signature); int fdpass_valid_secret ( const std::string &secret, const char *line, std::vector &words, int &n); int fdpass_valid_secret ( const std::map &secrets, const char *host, const char *line, std::vector &words, int &n); void fdpass_makesalt (char out[32+1]); void fdpass_send (struct _F_TCPSERVER_V1 *c, const std::string &secret, const char *line); void fdpass_send (_F_TCPSERVER_V1 *c, const std::string &host, const std::map &secrets, const char *line); void fdpass_sendf (_F_TCPSERVER_V1 *c, const std::string &secret, const char *ctl, ...); void fdpass_sendf (_F_TCPSERVER_V1 *c, const std::string &host, const std::map &secrets, const char *ctl, ...); void fdpass_sendf (_F_TCPSERVER_V1 *c, const std::string &host, const std::map &secrets, const PROTOSTR &ctl, ...); void fdpass_sendtof (int fd, const std::string &host, const std::map &secrets, const PROTOSTR &ctl, ...); void fdpass_sendf (const std::string &host, const char *port, const std::map &secrets, const PROTOSTR &ctl, ...); void fdpass_sendto (int fd, const std::string &secret, const char *line); void fdpass_sendto (int fd, const std::string &host, const std::map &secrets, const char *line); void fdpass_sendtof (int fd, const std::string &secret, const char *ctl, ...); void fdpass_sendtof (int fd, const std::string &host, const std::map &secrets, const char *ctl, ...); int fdpass_sendmaster (int fd, bool is_far); int fdpass_sendmaster (const std::string &host, const std::map &secrets, int fd, bool is_far); bool fdpass_protocheck (const char *line, std::string &newline); bool fdpass_isbadchar (const char car); void fdpass_format_intruder (time_t intrudetime, char intruder[100]); void fdpass_readsecret (const char *secretfile, std::string &mysecret); void fdpass_readsecrets(const char *secretfile, std::map &secrets); std::string fdpass_findsecret (const std::map &secrets, const std::string &host); #endif