1
1

Improve ssh_options_set_host().

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@347 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
Andreas Schneider 2009-04-02 10:13:12 +00:00
родитель a9ef024f10
Коммит 6026de4648
3 изменённых файлов: 48 добавлений и 19 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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)){