Improve ssh_options_set_host().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@347 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
родитель
a9ef024f10
Коммит
6026de4648
@ -311,7 +311,7 @@ int ssh_options_set_wanted_algos(SSH_OPTIONS *opt, int algo, const char *list);
|
||||
void ssh_options_set_username(SSH_OPTIONS *opt, const char *username);
|
||||
void ssh_options_set_port(SSH_OPTIONS *opt, unsigned int port);
|
||||
int ssh_options_getopt(SSH_OPTIONS *options, int *argcptr, char **argv);
|
||||
void ssh_options_set_host(SSH_OPTIONS *opt, const char *host);
|
||||
int ssh_options_set_host(SSH_OPTIONS *opt, const char *host);
|
||||
void ssh_options_set_fd(SSH_OPTIONS *opt, socket_t fd);
|
||||
void ssh_options_set_bind(SSH_OPTIONS *opt, const char *bindaddr, int port);
|
||||
void ssh_options_set_identity(SSH_OPTIONS *opt, const char *identity);
|
||||
|
@ -211,24 +211,50 @@ void ssh_options_free(SSH_OPTIONS *opt) {
|
||||
SAFE_FREE(opt);
|
||||
}
|
||||
|
||||
/** \brief set destination hostname
|
||||
* \param opt option structure
|
||||
* \param hostname host name to connect
|
||||
/**
|
||||
* @brief Set destination hostname
|
||||
*
|
||||
* @param opt The option structure to use.
|
||||
*
|
||||
* @param hostname The host name to connect.
|
||||
*
|
||||
* @return 0 on succes, < 0 on error.
|
||||
*/
|
||||
void ssh_options_set_host(SSH_OPTIONS *opt, const char *hostname){
|
||||
char *ptr=strdup(hostname);
|
||||
char *ptr2=strchr(ptr,'@');
|
||||
if(opt->host) // don't leak memory
|
||||
free(opt->host);
|
||||
if(ptr2){
|
||||
*ptr2=0;
|
||||
opt->host=strdup(ptr2+1);
|
||||
if(opt->username)
|
||||
free(opt->username);
|
||||
opt->username=strdup(ptr);
|
||||
free(ptr);
|
||||
} else
|
||||
opt->host=ptr;
|
||||
int ssh_options_set_host(SSH_OPTIONS *opt, const char *hostname){
|
||||
char *h;
|
||||
char *p;
|
||||
|
||||
h = strdup(hostname);
|
||||
if (h == NULL) {
|
||||
return -1;
|
||||
}
|
||||
p = strchr(h, '@');
|
||||
|
||||
if (opt->host) {
|
||||
SAFE_FREE(opt->host);
|
||||
}
|
||||
|
||||
if (p) {
|
||||
*p = '\0';
|
||||
opt->host = strdup(p + 1);
|
||||
if (opt->host == NULL) {
|
||||
SAFE_FREE(h);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (opt->username) {
|
||||
SAFE_FREE(opt->username);
|
||||
}
|
||||
opt->username = strdup(h);
|
||||
SAFE_FREE(h);
|
||||
if (opt->username == NULL) {
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
opt->host = h;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** \brief set username for authentication
|
||||
|
5
sample.c
5
sample.c
@ -422,7 +422,10 @@ int main(int argc, char **argv){
|
||||
signal(SIGTERM, do_exit);
|
||||
if(user)
|
||||
ssh_options_set_username(options,user);
|
||||
ssh_options_set_host(options,host);
|
||||
if (ssh_options_set_host(options,host) < 0) {
|
||||
ssh_options_free(options);
|
||||
return 1;
|
||||
}
|
||||
session=ssh_new();
|
||||
ssh_set_options(session,options);
|
||||
if(ssh_connect(session)){
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user