Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Geofferey/dropbear
1 result
Show changes
Commits on Source (10)
Loading
@@ -40,8 +40,8 @@
Loading
@@ -40,8 +40,8 @@
/* client functions */ /* client functions */
void cli_load_agent_keys(m_list * ret_list); void cli_load_agent_keys(m_list * ret_list);
void agent_buf_sign(buffer *sigblob, sign_key *key, void agent_buf_sign(buffer *sigblob, sign_key *key,
buffer *data_buf); const buffer *data_buf);
void cli_setup_agent(struct Channel *channel); void cli_setup_agent(const struct Channel *channel);
   
#ifdef __hpux #ifdef __hpux
#define seteuid(a) setresuid(-1, (a), -1) #define seteuid(a) setresuid(-1, (a), -1)
Loading
@@ -56,7 +56,7 @@ extern const struct ChanType cli_chan_agent;
Loading
@@ -56,7 +56,7 @@ extern const struct ChanType cli_chan_agent;
   
int svr_agentreq(struct ChanSess * chansess); int svr_agentreq(struct ChanSess * chansess);
void svr_agentcleanup(struct ChanSess * chansess); void svr_agentcleanup(struct ChanSess * chansess);
void svr_agentset(struct ChanSess *chansess); void svr_agentset(const struct ChanSess *chansess);
   
#endif /* DROPBEAR_SVR_AGENTFWD */ #endif /* DROPBEAR_SVR_AGENTFWD */
   
Loading
Loading
Loading
@@ -112,8 +112,8 @@ struct dropbear_kex {
Loading
@@ -112,8 +112,8 @@ struct dropbear_kex {
const struct ltc_hash_descriptor *hash_desc; const struct ltc_hash_descriptor *hash_desc;
}; };
   
int have_algo(char* algo, size_t algolen, algo_type algos[]); int have_algo(const char* algo, size_t algolen, const algo_type algos[]);
void buf_put_algolist(buffer * buf, algo_type localalgos[]); void buf_put_algolist(buffer * buf, const algo_type localalgos[]);
   
enum kexguess2_used { enum kexguess2_used {
KEXGUESS2_LOOK, KEXGUESS2_LOOK,
Loading
@@ -131,7 +131,7 @@ algo_type * buf_match_algo(buffer* buf, algo_type localalgos[],
Loading
@@ -131,7 +131,7 @@ algo_type * buf_match_algo(buffer* buf, algo_type localalgos[],
#if DROPBEAR_USER_ALGO_LIST #if DROPBEAR_USER_ALGO_LIST
int check_user_algos(const char* user_algo_list, algo_type * algos, int check_user_algos(const char* user_algo_list, algo_type * algos,
const char *algo_desc); const char *algo_desc);
char * algolist_string(algo_type algos[]); char * algolist_string(const algo_type algos[]);
#endif #endif
   
enum { enum {
Loading
Loading
Loading
@@ -36,7 +36,7 @@ void cli_authinitialise(void);
Loading
@@ -36,7 +36,7 @@ void cli_authinitialise(void);
void recv_msg_userauth_request(void); void recv_msg_userauth_request(void);
void send_msg_userauth_failure(int partial, int incrfail); void send_msg_userauth_failure(int partial, int incrfail);
void send_msg_userauth_success(void); void send_msg_userauth_success(void);
void send_msg_userauth_banner(buffer *msg); void send_msg_userauth_banner(const buffer *msg);
void svr_auth_password(void); void svr_auth_password(void);
void svr_auth_pubkey(void); void svr_auth_pubkey(void);
void svr_auth_pam(void); void svr_auth_pam(void);
Loading
@@ -74,7 +74,7 @@ void cli_pubkeyfail(void);
Loading
@@ -74,7 +74,7 @@ void cli_pubkeyfail(void);
void cli_auth_password(void); void cli_auth_password(void);
int cli_auth_pubkey(void); int cli_auth_pubkey(void);
void cli_auth_interactive(void); void cli_auth_interactive(void);
char* getpass_or_cancel(char* prompt); char* getpass_or_cancel(const char* prompt);
void cli_auth_pubkey_cleanup(void); void cli_auth_pubkey_cleanup(void);
   
   
Loading
Loading
Loading
@@ -67,7 +67,7 @@ void buf_free(buffer* buf) {
Loading
@@ -67,7 +67,7 @@ void buf_free(buffer* buf) {
} }
   
/* overwrite the contents of the buffer to clear it */ /* overwrite the contents of the buffer to clear it */
void buf_burn(buffer* buf) { void buf_burn(const buffer* buf) {
m_burn(buf->data, buf->size); m_burn(buf->data, buf->size);
   
Loading
@@ -91,7 +91,7 @@ buffer* buf_resize(buffer *buf, unsigned int newsize) {
Loading
@@ -91,7 +91,7 @@ buffer* buf_resize(buffer *buf, unsigned int newsize) {
   
/* Create a copy of buf, allocating required memory etc. */ /* Create a copy of buf, allocating required memory etc. */
/* The new buffer is sized the same as the length of the source buffer. */ /* The new buffer is sized the same as the length of the source buffer. */
buffer* buf_newcopy(buffer* buf) { buffer* buf_newcopy(const buffer* buf) {
buffer* ret; buffer* ret;
   
Loading
@@ -184,7 +184,7 @@ void buf_putbyte(buffer* buf, unsigned char val) {
Loading
@@ -184,7 +184,7 @@ void buf_putbyte(buffer* buf, unsigned char val) {
   
/* returns an in-place pointer to the buffer, checking that /* returns an in-place pointer to the buffer, checking that
* the next len bytes from that position can be used */ * the next len bytes from that position can be used */
unsigned char* buf_getptr(buffer* buf, unsigned int len) { unsigned char* buf_getptr(const buffer* buf, unsigned int len) {
   
if (len > BUF_MAX_INCR || buf->pos + len > buf->len) { if (len > BUF_MAX_INCR || buf->pos + len > buf->len) {
dropbear_exit("Bad buf_getptr"); dropbear_exit("Bad buf_getptr");
Loading
@@ -194,7 +194,7 @@ unsigned char* buf_getptr(buffer* buf, unsigned int len) {
Loading
@@ -194,7 +194,7 @@ unsigned char* buf_getptr(buffer* buf, unsigned int len) {
   
/* like buf_getptr, but checks against total size, not used length. /* like buf_getptr, but checks against total size, not used length.
* This allows writing past the used length, but not past the size */ * This allows writing past the used length, but not past the size */
unsigned char* buf_getwriteptr(buffer* buf, unsigned int len) { unsigned char* buf_getwriteptr(const buffer* buf, unsigned int len) {
   
if (len > BUF_MAX_INCR || buf->pos + len > buf->size) { if (len > BUF_MAX_INCR || buf->pos + len > buf->size) {
dropbear_exit("Bad buf_getwriteptr"); dropbear_exit("Bad buf_getwriteptr");
Loading
Loading
Loading
@@ -44,8 +44,8 @@ buffer * buf_new(unsigned int size);
Loading
@@ -44,8 +44,8 @@ buffer * buf_new(unsigned int size);
/* Possibly returns a new buffer*, like realloc() */ /* Possibly returns a new buffer*, like realloc() */
buffer * buf_resize(buffer *buf, unsigned int newsize); buffer * buf_resize(buffer *buf, unsigned int newsize);
void buf_free(buffer* buf); void buf_free(buffer* buf);
void buf_burn(buffer* buf); void buf_burn(const buffer* buf);
buffer* buf_newcopy(buffer* buf); buffer* buf_newcopy(const buffer* buf);
void buf_setlen(buffer* buf, unsigned int len); void buf_setlen(buffer* buf, unsigned int len);
void buf_incrlen(buffer* buf, unsigned int incr); void buf_incrlen(buffer* buf, unsigned int incr);
void buf_setpos(buffer* buf, unsigned int pos); void buf_setpos(buffer* buf, unsigned int pos);
Loading
@@ -54,8 +54,8 @@ void buf_incrwritepos(buffer* buf, unsigned int incr);
Loading
@@ -54,8 +54,8 @@ void buf_incrwritepos(buffer* buf, unsigned int incr);
unsigned char buf_getbyte(buffer* buf); unsigned char buf_getbyte(buffer* buf);
unsigned char buf_getbool(buffer* buf); unsigned char buf_getbool(buffer* buf);
void buf_putbyte(buffer* buf, unsigned char val); void buf_putbyte(buffer* buf, unsigned char val);
unsigned char* buf_getptr(buffer* buf, unsigned int len); unsigned char* buf_getptr(const buffer* buf, unsigned int len);
unsigned char* buf_getwriteptr(buffer* buf, unsigned int len); unsigned char* buf_getwriteptr(const buffer* buf, unsigned int len);
char* buf_getstring(buffer* buf, unsigned int *retlen); char* buf_getstring(buffer* buf, unsigned int *retlen);
buffer * buf_getstringbuf(buffer *buf); buffer * buf_getstringbuf(buffer *buf);
void buf_eatstring(buffer *buf); void buf_eatstring(buffer *buf);
Loading
Loading
Loading
@@ -84,7 +84,7 @@ struct Channel {
Loading
@@ -84,7 +84,7 @@ struct Channel {
int flushing; int flushing;
   
/* Used by client chansession to handle ~ escaping, NULL ignored otherwise */ /* Used by client chansession to handle ~ escaping, NULL ignored otherwise */
void (*read_mangler)(struct Channel*, unsigned char* bytes, int *len); void (*read_mangler)(const struct Channel*, const unsigned char* bytes, int *len);
   
const struct ChanType* type; const struct ChanType* type;
   
Loading
@@ -98,7 +98,7 @@ struct ChanType {
Loading
@@ -98,7 +98,7 @@ struct ChanType {
int (*inithandler)(struct Channel*); int (*inithandler)(struct Channel*);
int (*check_close)(struct Channel*); int (*check_close)(struct Channel*);
void (*reqhandler)(struct Channel*); void (*reqhandler)(struct Channel*);
void (*closehandler)(struct Channel*); void (*closehandler)(const struct Channel*);
}; };
   
/* Callback for connect_remote */ /* Callback for connect_remote */
Loading
@@ -107,7 +107,7 @@ void channel_connect_done(int result, int sock, void* user_data, const char* err
Loading
@@ -107,7 +107,7 @@ void channel_connect_done(int result, int sock, void* user_data, const char* err
void chaninitialise(const struct ChanType *chantypes[]); void chaninitialise(const struct ChanType *chantypes[]);
void chancleanup(void); void chancleanup(void);
void setchannelfds(fd_set *readfds, fd_set *writefds, int allow_reads); void setchannelfds(fd_set *readfds, fd_set *writefds, int allow_reads);
void channelio(fd_set *readfd, fd_set *writefd); void channelio(const fd_set *readfd, const fd_set *writefd);
struct Channel* getchannel(void); struct Channel* getchannel(void);
/* Returns an arbitrary channel that is in a ready state - not /* Returns an arbitrary channel that is in a ready state - not
being initialised and no EOF in either direction. NULL if none. */ being initialised and no EOF in either direction. NULL if none. */
Loading
@@ -115,8 +115,8 @@ struct Channel* get_any_ready_channel(void);
Loading
@@ -115,8 +115,8 @@ struct Channel* get_any_ready_channel(void);
   
void recv_msg_channel_open(void); void recv_msg_channel_open(void);
void recv_msg_channel_request(void); void recv_msg_channel_request(void);
void send_msg_channel_failure(struct Channel *channel); void send_msg_channel_failure(const struct Channel *channel);
void send_msg_channel_success(struct Channel *channel); void send_msg_channel_success(const struct Channel *channel);
void recv_msg_channel_data(void); void recv_msg_channel_data(void);
void recv_msg_channel_extended_data(void); void recv_msg_channel_extended_data(void);
void recv_msg_channel_window_adjust(void); void recv_msg_channel_window_adjust(void);
Loading
@@ -135,7 +135,7 @@ int send_msg_channel_open_init(int fd, const struct ChanType *type);
Loading
@@ -135,7 +135,7 @@ int send_msg_channel_open_init(int fd, const struct ChanType *type);
void recv_msg_channel_open_confirmation(void); void recv_msg_channel_open_confirmation(void);
void recv_msg_channel_open_failure(void); void recv_msg_channel_open_failure(void);
#endif #endif
void start_send_channel_request(struct Channel *channel, char *type); void start_send_channel_request(const struct Channel *channel, const char *type);
   
void send_msg_request_success(void); void send_msg_request_success(void);
void send_msg_request_failure(void); void send_msg_request_failure(void);
Loading
Loading
Loading
@@ -56,19 +56,19 @@ void cbuf_free(circbuffer * cbuf) {
Loading
@@ -56,19 +56,19 @@ void cbuf_free(circbuffer * cbuf) {
m_free(cbuf); m_free(cbuf);
} }
   
unsigned int cbuf_getused(circbuffer * cbuf) { unsigned int cbuf_getused(const circbuffer * cbuf) {
   
return cbuf->used; return cbuf->used;
   
} }
   
unsigned int cbuf_getavail(circbuffer * cbuf) { unsigned int cbuf_getavail(const circbuffer * cbuf) {
   
return cbuf->size - cbuf->used; return cbuf->size - cbuf->used;
   
} }
   
unsigned int cbuf_writelen(circbuffer *cbuf) { unsigned int cbuf_writelen(const circbuffer *cbuf) {
   
dropbear_assert(cbuf->used <= cbuf->size); dropbear_assert(cbuf->used <= cbuf->size);
dropbear_assert(((2*cbuf->size)+cbuf->writepos-cbuf->readpos)%cbuf->size == cbuf->used%cbuf->size); dropbear_assert(((2*cbuf->size)+cbuf->writepos-cbuf->readpos)%cbuf->size == cbuf->used%cbuf->size);
Loading
@@ -86,7 +86,7 @@ unsigned int cbuf_writelen(circbuffer *cbuf) {
Loading
@@ -86,7 +86,7 @@ unsigned int cbuf_writelen(circbuffer *cbuf) {
return cbuf->size - cbuf->writepos; return cbuf->size - cbuf->writepos;
} }
   
void cbuf_readptrs(circbuffer *cbuf, void cbuf_readptrs(const circbuffer *cbuf,
unsigned char **p1, unsigned int *len1, unsigned char **p1, unsigned int *len1,
unsigned char **p2, unsigned int *len2) { unsigned char **p2, unsigned int *len2) {
*p1 = &cbuf->data[cbuf->readpos]; *p1 = &cbuf->data[cbuf->readpos];
Loading
Loading
Loading
@@ -38,12 +38,12 @@ typedef struct circbuf circbuffer;
Loading
@@ -38,12 +38,12 @@ typedef struct circbuf circbuffer;
circbuffer * cbuf_new(unsigned int size); circbuffer * cbuf_new(unsigned int size);
void cbuf_free(circbuffer * cbuf); void cbuf_free(circbuffer * cbuf);
   
unsigned int cbuf_getused(circbuffer * cbuf); /* how much data stored */ unsigned int cbuf_getused(const circbuffer * cbuf); /* how much data stored */
unsigned int cbuf_getavail(circbuffer * cbuf); /* how much we can write */ unsigned int cbuf_getavail(const circbuffer * cbuf); /* how much we can write */
unsigned int cbuf_writelen(circbuffer *cbuf); /* max linear write len */ unsigned int cbuf_writelen(const circbuffer *cbuf); /* max linear write len */
   
/* returns pointers to the two portions of the circular buffer that can be read */ /* returns pointers to the two portions of the circular buffer that can be read */
void cbuf_readptrs(circbuffer *cbuf, void cbuf_readptrs(const circbuffer *cbuf,
unsigned char **p1, unsigned int *len1, unsigned char **p1, unsigned int *len1,
unsigned char **p2, unsigned int *len2); unsigned char **p2, unsigned int *len2);
unsigned char* cbuf_writeptr(circbuffer *cbuf, unsigned int len); unsigned char* cbuf_writeptr(circbuffer *cbuf, unsigned int len);
Loading
Loading
Loading
@@ -108,7 +108,7 @@ static int new_agent_chan(struct Channel * channel) {
Loading
@@ -108,7 +108,7 @@ static int new_agent_chan(struct Channel * channel) {
data Any data, depending on packet type. Encoding as in the ssh packet data Any data, depending on packet type. Encoding as in the ssh packet
protocol. protocol.
*/ */
static buffer * agent_request(unsigned char type, buffer *data) { static buffer * agent_request(unsigned char type, const buffer *data) {
   
buffer * payload = NULL; buffer * payload = NULL;
buffer * inbuf = NULL; buffer * inbuf = NULL;
Loading
@@ -230,7 +230,7 @@ out:
Loading
@@ -230,7 +230,7 @@ out:
} }
} }
   
void cli_setup_agent(struct Channel *channel) { void cli_setup_agent(const struct Channel *channel) {
if (!getenv("SSH_AUTH_SOCK")) { if (!getenv("SSH_AUTH_SOCK")) {
return; return;
} }
Loading
@@ -254,7 +254,7 @@ void cli_load_agent_keys(m_list *ret_list) {
Loading
@@ -254,7 +254,7 @@ void cli_load_agent_keys(m_list *ret_list) {
} }
   
void agent_buf_sign(buffer *sigblob, sign_key *key, void agent_buf_sign(buffer *sigblob, sign_key *key,
buffer *data_buf) { const buffer *data_buf) {
buffer *request_data = NULL; buffer *request_data = NULL;
buffer *response = NULL; buffer *response = NULL;
unsigned int siglen; unsigned int siglen;
Loading
Loading
Loading
@@ -331,7 +331,7 @@ int cli_auth_try() {
Loading
@@ -331,7 +331,7 @@ int cli_auth_try() {
#if DROPBEAR_CLI_PASSWORD_AUTH || DROPBEAR_CLI_INTERACT_AUTH #if DROPBEAR_CLI_PASSWORD_AUTH || DROPBEAR_CLI_INTERACT_AUTH
/* A helper for getpass() that exits if the user cancels. The returned /* A helper for getpass() that exits if the user cancels. The returned
* password is statically allocated by getpass() */ * password is statically allocated by getpass() */
char* getpass_or_cancel(char* prompt) char* getpass_or_cancel(const char* prompt)
{ {
char* password = NULL; char* password = NULL;
Loading
Loading
Loading
@@ -121,7 +121,7 @@ void recv_msg_userauth_pk_ok() {
Loading
@@ -121,7 +121,7 @@ void recv_msg_userauth_pk_ok() {
} }
   
void cli_buf_put_sign(buffer* buf, sign_key *key, int type, void cli_buf_put_sign(buffer* buf, sign_key *key, int type,
buffer *data_buf) { const buffer *data_buf) {
#if DROPBEAR_CLI_AGENTFWD #if DROPBEAR_CLI_AGENTFWD
if (key->source == SIGNKEY_SOURCE_AGENT) { if (key->source == SIGNKEY_SOURCE_AGENT) {
/* Format the agent signature ourselves, as buf_put_sign would. */ /* Format the agent signature ourselves, as buf_put_sign would. */
Loading
Loading
Loading
@@ -35,12 +35,12 @@
Loading
@@ -35,12 +35,12 @@
#include "chansession.h" #include "chansession.h"
#include "agentfwd.h" #include "agentfwd.h"
   
static void cli_closechansess(struct Channel *channel); static void cli_closechansess(const struct Channel *channel);
static int cli_initchansess(struct Channel *channel); static int cli_initchansess(struct Channel *channel);
static void cli_chansessreq(struct Channel *channel); static void cli_chansessreq(struct Channel *channel);
static void send_chansess_pty_req(struct Channel *channel); static void send_chansess_pty_req(const struct Channel *channel);
static void send_chansess_shell_req(struct Channel *channel); static void send_chansess_shell_req(const struct Channel *channel);
static void cli_escape_handler(struct Channel *channel, unsigned char* buf, int *len); static void cli_escape_handler(const struct Channel *channel, const unsigned char* buf, int *len);
static int cli_init_netcat(struct Channel *channel); static int cli_init_netcat(struct Channel *channel);
   
static void cli_tty_setup(void); static void cli_tty_setup(void);
Loading
@@ -83,7 +83,7 @@ out:
Loading
@@ -83,7 +83,7 @@ out:
   
/* If the main session goes, we close it up */ /* If the main session goes, we close it up */
static void cli_closechansess(struct Channel *UNUSED(channel)) { static void cli_closechansess(const struct Channel *UNUSED(channel)) {
cli_tty_cleanup(); /* Restore tty modes etc */ cli_tty_cleanup(); /* Restore tty modes etc */
   
/* This channel hasn't gone yet, so we have > 1 */ /* This channel hasn't gone yet, so we have > 1 */
Loading
@@ -270,7 +270,7 @@ void cli_chansess_winchange() {
Loading
@@ -270,7 +270,7 @@ void cli_chansess_winchange() {
cli_ses.winchange = 0; cli_ses.winchange = 0;
} }
   
static void send_chansess_pty_req(struct Channel *channel) { static void send_chansess_pty_req(const struct Channel *channel) {
   
char* term = NULL; char* term = NULL;
   
Loading
@@ -303,7 +303,7 @@ static void send_chansess_pty_req(struct Channel *channel) {
Loading
@@ -303,7 +303,7 @@ static void send_chansess_pty_req(struct Channel *channel) {
TRACE(("leave send_chansess_pty_req")) TRACE(("leave send_chansess_pty_req"))
} }
   
static void send_chansess_shell_req(struct Channel *channel) { static void send_chansess_shell_req(const struct Channel *channel) {
   
char* reqtype = NULL; char* reqtype = NULL;
   
Loading
@@ -452,7 +452,7 @@ do_escape(unsigned char c) {
Loading
@@ -452,7 +452,7 @@ do_escape(unsigned char c) {
} }
   
static static
void cli_escape_handler(struct Channel* UNUSED(channel), unsigned char* buf, int *len) { void cli_escape_handler(const struct Channel* UNUSED(channel), const unsigned char* buf, int *len) {
char c; char c;
int skip_char = 0; int skip_char = 0;
   
Loading
Loading
Loading
@@ -39,7 +39,7 @@
Loading
@@ -39,7 +39,7 @@
#include "ecc.h" #include "ecc.h"
   
   
static void checkhostkey(unsigned char* keyblob, unsigned int keybloblen); static void checkhostkey(const unsigned char* keyblob, unsigned int keybloblen);
#define MAX_KNOWNHOSTS_LINE 4500 #define MAX_KNOWNHOSTS_LINE 4500
   
void send_msg_kexdh_init() { void send_msg_kexdh_init() {
Loading
@@ -185,7 +185,7 @@ void recv_msg_kexdh_reply() {
Loading
@@ -185,7 +185,7 @@ void recv_msg_kexdh_reply() {
TRACE(("leave recv_msg_kexdh_init")) TRACE(("leave recv_msg_kexdh_init"))
} }
   
static void ask_to_confirm(unsigned char* keyblob, unsigned int keybloblen, static void ask_to_confirm(const unsigned char* keyblob, unsigned int keybloblen,
const char* algoname) { const char* algoname) {
   
char* fp = NULL; char* fp = NULL;
Loading
@@ -282,7 +282,7 @@ out:
Loading
@@ -282,7 +282,7 @@ out:
return hostsfile; return hostsfile;
} }
   
static void checkhostkey(unsigned char* keyblob, unsigned int keybloblen) { static void checkhostkey(const unsigned char* keyblob, unsigned int keybloblen) {
   
FILE *hostsfile = NULL; FILE *hostsfile = NULL;
int readonly = 0; int readonly = 0;
Loading
Loading
Loading
@@ -66,8 +66,8 @@ int main(int argc, char ** argv) {
Loading
@@ -66,8 +66,8 @@ int main(int argc, char ** argv) {
} }
#endif #endif
   
TRACE(("user='%s' host='%s' port='%s'", cli_opts.username, TRACE(("user='%s' host='%s' port='%s' bind_address='%s' bind_port='%s'", cli_opts.username,
cli_opts.remotehost, cli_opts.remoteport)) cli_opts.remotehost, cli_opts.remoteport, cli_opts.bind_address, cli_opts.bind_port))
   
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
dropbear_exit("signal() error"); dropbear_exit("signal() error");
Loading
@@ -86,7 +86,8 @@ int main(int argc, char ** argv) {
Loading
@@ -86,7 +86,8 @@ int main(int argc, char ** argv) {
} else } else
#endif #endif
{ {
progress = connect_remote(cli_opts.remotehost, cli_opts.remoteport, cli_connected, &ses); progress = connect_remote(cli_opts.remotehost, cli_opts.remoteport,
cli_connected, &ses, cli_opts.bind_address, cli_opts.bind_port);
sock_in = sock_out = -1; sock_in = sock_out = -1;
} }
   
Loading
@@ -142,7 +143,7 @@ static void cli_dropbear_log(int priority,
Loading
@@ -142,7 +143,7 @@ static void cli_dropbear_log(int priority,
fflush(stderr); fflush(stderr);
} }
   
static void exec_proxy_cmd(void *user_data_cmd) { static void exec_proxy_cmd(const void *user_data_cmd) {
const char *cmd = user_data_cmd; const char *cmd = user_data_cmd;
char *usershell; char *usershell;
   
Loading
Loading
Loading
@@ -92,6 +92,7 @@ static void printhelp() {
Loading
@@ -92,6 +92,7 @@ static void printhelp() {
"-c <cipher list> Specify preferred ciphers ('-c help' to list options)\n" "-c <cipher list> Specify preferred ciphers ('-c help' to list options)\n"
"-m <MAC list> Specify preferred MACs for packet verification (or '-m help')\n" "-m <MAC list> Specify preferred MACs for packet verification (or '-m help')\n"
#endif #endif
"-b [bind_address][:bind_port]\n"
"-V Version\n" "-V Version\n"
#if DEBUG_TRACE #if DEBUG_TRACE
"-v verbose (compiled with DEBUG_TRACE)\n" "-v verbose (compiled with DEBUG_TRACE)\n"
Loading
@@ -125,12 +126,12 @@ void cli_getopts(int argc, char ** argv) {
Loading
@@ -125,12 +126,12 @@ void cli_getopts(int argc, char ** argv) {
OPT_OTHER OPT_OTHER
} opt; } opt;
unsigned int cmdlen; unsigned int cmdlen;
char* dummy = NULL; /* Not used for anything real */
   
char* recv_window_arg = NULL; char* recv_window_arg = NULL;
char* keepalive_arg = NULL; char* keepalive_arg = NULL;
char* idle_timeout_arg = NULL; char* idle_timeout_arg = NULL;
char *host_arg = NULL; char *host_arg = NULL;
char *bind_arg = NULL;
char c; char c;
   
/* see printhelp() for options */ /* see printhelp() for options */
Loading
@@ -166,6 +167,8 @@ void cli_getopts(int argc, char ** argv) {
Loading
@@ -166,6 +167,8 @@ void cli_getopts(int argc, char ** argv) {
#if DROPBEAR_CLI_PROXYCMD #if DROPBEAR_CLI_PROXYCMD
cli_opts.proxycmd = NULL; cli_opts.proxycmd = NULL;
#endif #endif
cli_opts.bind_address = NULL;
cli_opts.bind_port = NULL;
#ifndef DISABLE_ZLIB #ifndef DISABLE_ZLIB
opts.compress_mode = DROPBEAR_COMPRESS_ON; opts.compress_mode = DROPBEAR_COMPRESS_ON;
#endif #endif
Loading
@@ -314,8 +317,8 @@ void cli_getopts(int argc, char ** argv) {
Loading
@@ -314,8 +317,8 @@ void cli_getopts(int argc, char ** argv) {
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
break; break;
case 'b': case 'b':
next = &dummy; next = &bind_arg;
/* FALLTHROUGH */ break;
default: default:
fprintf(stderr, fprintf(stderr,
"WARNING: Ignoring unknown option -%c\n", c); "WARNING: Ignoring unknown option -%c\n", c);
Loading
@@ -420,6 +423,18 @@ void cli_getopts(int argc, char ** argv) {
Loading
@@ -420,6 +423,18 @@ void cli_getopts(int argc, char ** argv) {
cli_opts.remoteport = "22"; cli_opts.remoteport = "22";
} }
   
if (bind_arg) {
/* split [host][:port] */
char *port = strrchr(bind_arg, ':');
if (port) {
cli_opts.bind_port = m_strdup(port+1);
*port = '\0';
}
if (strlen(bind_arg) > 0) {
cli_opts.bind_address = m_strdup(bind_arg);
}
}
/* If not explicitly specified with -t or -T, we don't want a pty if /* If not explicitly specified with -t or -T, we don't want a pty if
* there's a command, but we do otherwise */ * there's a command, but we do otherwise */
if (cli_opts.wantpty == 9) { if (cli_opts.wantpty == 9) {
Loading
Loading
Loading
@@ -274,7 +274,7 @@ static int newtcpforwarded(struct Channel * channel) {
Loading
@@ -274,7 +274,7 @@ static int newtcpforwarded(struct Channel * channel) {
} }
snprintf(portstring, sizeof(portstring), "%u", fwd->connectport); snprintf(portstring, sizeof(portstring), "%u", fwd->connectport);
channel->conn_pending = connect_remote(fwd->connectaddr, portstring, channel_connect_done, channel); channel->conn_pending = connect_remote(fwd->connectaddr, portstring, channel_connect_done, channel, NULL, NULL);
   
channel->prio = DROPBEAR_CHANNEL_PRIO_UNKNOWABLE; channel->prio = DROPBEAR_CHANNEL_PRIO_UNKNOWABLE;
Loading
Loading
Loading
@@ -314,7 +314,7 @@ algo_type sshkex[] = {
Loading
@@ -314,7 +314,7 @@ algo_type sshkex[] = {
* against. * against.
* Returns DROPBEAR_SUCCESS if we have a match for algo, DROPBEAR_FAILURE * Returns DROPBEAR_SUCCESS if we have a match for algo, DROPBEAR_FAILURE
* otherwise */ * otherwise */
int have_algo(char* algo, size_t algolen, algo_type algos[]) { int have_algo(const char* algo, size_t algolen, const algo_type algos[]) {
   
int i; int i;
   
Loading
@@ -329,7 +329,7 @@ int have_algo(char* algo, size_t algolen, algo_type algos[]) {
Loading
@@ -329,7 +329,7 @@ int have_algo(char* algo, size_t algolen, algo_type algos[]) {
} }
   
/* Output a comma separated list of algorithms to a buffer */ /* Output a comma separated list of algorithms to a buffer */
void buf_put_algolist(buffer * buf, algo_type localalgos[]) { void buf_put_algolist(buffer * buf, const algo_type localalgos[]) {
   
unsigned int i, len; unsigned int i, len;
unsigned int donefirst = 0; unsigned int donefirst = 0;
Loading
@@ -501,7 +501,7 @@ get_algo_usable(algo_type algos[], const char * algo_name)
Loading
@@ -501,7 +501,7 @@ get_algo_usable(algo_type algos[], const char * algo_name)
#if DROPBEAR_USER_ALGO_LIST #if DROPBEAR_USER_ALGO_LIST
   
char * char *
algolist_string(algo_type algos[]) algolist_string(const algo_type algos[])
{ {
char *ret_list; char *ret_list;
buffer *b = buf_new(200); buffer *b = buf_new(200);
Loading
Loading
Loading
@@ -38,18 +38,18 @@
Loading
@@ -38,18 +38,18 @@
   
static void send_msg_channel_open_failure(unsigned int remotechan, int reason, static void send_msg_channel_open_failure(unsigned int remotechan, int reason,
const char *text, const char *lang); const char *text, const char *lang);
static void send_msg_channel_open_confirmation(struct Channel* channel, static void send_msg_channel_open_confirmation(const struct Channel* channel,
unsigned int recvwindow, unsigned int recvwindow,
unsigned int recvmaxpacket); unsigned int recvmaxpacket);
static int writechannel(struct Channel* channel, int fd, circbuffer *cbuf, static int writechannel(struct Channel* channel, int fd, circbuffer *cbuf,
const unsigned char *moredata, unsigned int *morelen); const unsigned char *moredata, unsigned int *morelen);
static void send_msg_channel_window_adjust(struct Channel *channel, static void send_msg_channel_window_adjust(const struct Channel *channel,
unsigned int incr); unsigned int incr);
static void send_msg_channel_data(struct Channel *channel, int isextended); static void send_msg_channel_data(struct Channel *channel, int isextended);
static void send_msg_channel_eof(struct Channel *channel); static void send_msg_channel_eof(struct Channel *channel);
static void send_msg_channel_close(struct Channel *channel); static void send_msg_channel_close(struct Channel *channel);
static void remove_channel(struct Channel *channel); static void remove_channel(struct Channel *channel);
static unsigned int write_pending(struct Channel * channel); static unsigned int write_pending(const struct Channel * channel);
static void check_close(struct Channel *channel); static void check_close(struct Channel *channel);
static void close_chan_fd(struct Channel *channel, int fd, int how); static void close_chan_fd(struct Channel *channel, int fd, int how);
   
Loading
@@ -198,7 +198,7 @@ struct Channel* getchannel() {
Loading
@@ -198,7 +198,7 @@ struct Channel* getchannel() {
} }
   
/* Iterate through the channels, performing IO if available */ /* Iterate through the channels, performing IO if available */
void channelio(fd_set *readfds, fd_set *writefds) { void channelio(const fd_set *readfds, const fd_set *writefds) {
   
/* Listeners such as TCP, X11, agent-auth */ /* Listeners such as TCP, X11, agent-auth */
struct Channel *channel; struct Channel *channel;
Loading
@@ -262,7 +262,7 @@ void channelio(fd_set *readfds, fd_set *writefds) {
Loading
@@ -262,7 +262,7 @@ void channelio(fd_set *readfds, fd_set *writefds) {
   
/* Returns true if there is data remaining to be written to stdin or /* Returns true if there is data remaining to be written to stdin or
* stderr of a channel's endpoint. */ * stderr of a channel's endpoint. */
static unsigned int write_pending(struct Channel * channel) { static unsigned int write_pending(const struct Channel * channel) {
   
if (channel->writefd >= 0 && cbuf_getused(channel->writebuf) > 0) { if (channel->writefd >= 0 && cbuf_getused(channel->writebuf) > 0) {
return 1; return 1;
Loading
@@ -903,7 +903,7 @@ void recv_msg_channel_window_adjust() {
Loading
@@ -903,7 +903,7 @@ void recv_msg_channel_window_adjust() {
   
/* Increment the incoming data window for a channel, and let the remote /* Increment the incoming data window for a channel, and let the remote
* end know */ * end know */
static void send_msg_channel_window_adjust(struct Channel* channel, static void send_msg_channel_window_adjust(const struct Channel* channel,
unsigned int incr) { unsigned int incr) {
   
TRACE(("sending window adjust %d", incr)) TRACE(("sending window adjust %d", incr))
Loading
@@ -1008,7 +1008,7 @@ cleanup:
Loading
@@ -1008,7 +1008,7 @@ cleanup:
} }
   
/* Send a failure message */ /* Send a failure message */
void send_msg_channel_failure(struct Channel *channel) { void send_msg_channel_failure(const struct Channel *channel) {
   
TRACE(("enter send_msg_channel_failure")) TRACE(("enter send_msg_channel_failure"))
CHECKCLEARTOWRITE(); CHECKCLEARTOWRITE();
Loading
@@ -1021,7 +1021,7 @@ void send_msg_channel_failure(struct Channel *channel) {
Loading
@@ -1021,7 +1021,7 @@ void send_msg_channel_failure(struct Channel *channel) {
} }
   
/* Send a success message */ /* Send a success message */
void send_msg_channel_success(struct Channel *channel) { void send_msg_channel_success(const struct Channel *channel) {
   
TRACE(("enter send_msg_channel_success")) TRACE(("enter send_msg_channel_success"))
CHECKCLEARTOWRITE(); CHECKCLEARTOWRITE();
Loading
@@ -1053,7 +1053,7 @@ static void send_msg_channel_open_failure(unsigned int remotechan,
Loading
@@ -1053,7 +1053,7 @@ static void send_msg_channel_open_failure(unsigned int remotechan,
   
/* Confirm a channel open, and let the remote end know what number we've /* Confirm a channel open, and let the remote end know what number we've
* allocated and the receive parameters */ * allocated and the receive parameters */
static void send_msg_channel_open_confirmation(struct Channel* channel, static void send_msg_channel_open_confirmation(const struct Channel* channel,
unsigned int recvwindow, unsigned int recvwindow,
unsigned int recvmaxpacket) { unsigned int recvmaxpacket) {
   
Loading
@@ -1239,8 +1239,8 @@ struct Channel* get_any_ready_channel() {
Loading
@@ -1239,8 +1239,8 @@ struct Channel* get_any_ready_channel() {
return NULL; return NULL;
} }
   
void start_send_channel_request(struct Channel *channel, void start_send_channel_request(const struct Channel *channel,
char *type) { const char *type) {
   
CHECKCLEARTOWRITE(); CHECKCLEARTOWRITE();
buf_putbyte(ses.writepayload, SSH_MSG_CHANNEL_REQUEST); buf_putbyte(ses.writepayload, SSH_MSG_CHANNEL_REQUEST);
Loading
Loading
Loading
@@ -714,7 +714,7 @@ void free_kexcurve25519_param(struct kex_curve25519_param *param)
Loading
@@ -714,7 +714,7 @@ void free_kexcurve25519_param(struct kex_curve25519_param *param)
m_free(param); m_free(param);
} }
   
void kexcurve25519_comb_key(struct kex_curve25519_param *param, buffer *buf_pub_them, void kexcurve25519_comb_key(const struct kex_curve25519_param *param, const buffer *buf_pub_them,
sign_key *hostkey) { sign_key *hostkey) {
unsigned char out[CURVE25519_LEN]; unsigned char out[CURVE25519_LEN];
const unsigned char* Q_C = NULL; const unsigned char* Q_C = NULL;
Loading
Loading
Loading
@@ -269,15 +269,20 @@ AC_ARG_ENABLE(openpty,
Loading
@@ -269,15 +269,20 @@ AC_ARG_ENABLE(openpty,
AC_MSG_NOTICE(Not using openpty) AC_MSG_NOTICE(Not using openpty)
else else
AC_MSG_NOTICE(Using openpty if available) AC_MSG_NOTICE(Using openpty if available)
AC_SEARCH_LIBS(openpty, util, [AC_DEFINE(HAVE_OPENPTY,1,[Have openpty() function])]) AC_SEARCH_LIBS(openpty, util, [dropbear_cv_func_have_openpty=yes])
fi fi
], ],
[ [
AC_MSG_NOTICE(Using openpty if available) AC_MSG_NOTICE(Using openpty if available)
AC_SEARCH_LIBS(openpty, util, [AC_DEFINE(HAVE_OPENPTY)]) AC_SEARCH_LIBS(openpty, util, [dropbear_cv_func_have_openpty=yes])
] ]
) )
if test "x$dropbear_cv_func_have_openpty" = "xyes"; then
AC_DEFINE(HAVE_OPENPTY,,Have openpty() function)
no_ptc_check=yes
no_ptmx_check=yes
fi
   
AC_ARG_ENABLE(syslog, AC_ARG_ENABLE(syslog,
[ --disable-syslog Don't include syslog support], [ --disable-syslog Don't include syslog support],
Loading
Loading