summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2006-03-05 22:54:56 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2006-03-05 22:54:56 +0000
commit1ba223eb08bbd3f270e65c6670b8d3b781bb57d0 (patch)
tree454dfeaa71809fa881d9095eb97fba692516586d
parent80efd49951372b44445e546b57b2ba550746f2ba (diff)
downloadgnutls-1ba223eb08bbd3f270e65c6670b8d3b781bb57d0.tar.gz
gnutls-cli can now recognize services and port numbers with the -p option.
-rw-r--r--src/cli-gaa.c178
-rw-r--r--src/cli-gaa.h54
-rw-r--r--src/cli.c12
-rw-r--r--src/cli.gaa8
-rw-r--r--src/common.c23
-rw-r--r--src/common.h1
6 files changed, 153 insertions, 123 deletions
diff --git a/src/cli-gaa.c b/src/cli-gaa.c
index 7fd15778c6..a4d48d8c2b 100644
--- a/src/cli-gaa.c
+++ b/src/cli-gaa.c
@@ -136,7 +136,6 @@ void gaa_help(void)
__gaa_helpsingle(0, "disable-extensions", "", "Disable all the TLS extensions.");
__gaa_helpsingle(0, "xml", "", "Print the certificate information in XML format.");
__gaa_helpsingle(0, "print-cert", "", "Print the certificate in PEM format.");
- __gaa_helpsingle('p', "port", "integer ", "The port to connect to.");
__gaa_helpsingle(0, "recordsize", "integer ", "The maximum record size to advertize.");
__gaa_helpsingle('V', "verbose", "", "More verbose output.");
__gaa_helpsingle(0, "ciphers", "cipher1 cipher2... ", "Ciphers to enable.");
@@ -157,6 +156,7 @@ void gaa_help(void)
__gaa_helpsingle(0, "srppasswd", "PASSWD ", "SRP password to use.");
__gaa_helpsingle(0, "pskusername", "NAME ", "PSK username to use.");
__gaa_helpsingle(0, "pskkey", "KEY ", "PSK key (in hex) to use.");
+ __gaa_helpsingle('p', "port", "PORT ", "The port to connect to.");
__gaa_helpsingle(0, "insecure", "", "Don't abort program if server certificate can't be validated.");
__gaa_helpsingle('l', "list", "", "Print a list of the supported algorithms and modes.");
__gaa_helpsingle('h', "help", "", "prints this help");
@@ -181,59 +181,59 @@ struct _gaainfo
#line 110 "cli.gaa"
int insecure;
#line 107 "cli.gaa"
- char *psk_key;
+ char *port;
#line 104 "cli.gaa"
- char *psk_username;
+ char *psk_key;
#line 101 "cli.gaa"
- char *srp_passwd;
+ char *psk_username;
#line 98 "cli.gaa"
- char *srp_username;
+ char *srp_passwd;
#line 95 "cli.gaa"
- char *x509_certfile;
+ char *srp_username;
#line 92 "cli.gaa"
- char *x509_keyfile;
+ char *x509_certfile;
#line 89 "cli.gaa"
- char *pgp_certfile;
+ char *x509_keyfile;
#line 86 "cli.gaa"
- char *pgp_trustdb;
+ char *pgp_certfile;
#line 83 "cli.gaa"
- char *pgp_keyring;
+ char *pgp_trustdb;
#line 80 "cli.gaa"
- char *pgp_keyfile;
+ char *pgp_keyring;
#line 77 "cli.gaa"
- char *x509_crlfile;
+ char *pgp_keyfile;
#line 74 "cli.gaa"
- char *x509_cafile;
+ char *x509_crlfile;
#line 71 "cli.gaa"
+ char *x509_cafile;
+#line 68 "cli.gaa"
char **ctype;
-#line 70 "cli.gaa"
- int nctype;
#line 67 "cli.gaa"
+ int nctype;
+#line 64 "cli.gaa"
char **kx;
-#line 66 "cli.gaa"
- int nkx;
#line 63 "cli.gaa"
+ int nkx;
+#line 60 "cli.gaa"
char **macs;
-#line 62 "cli.gaa"
- int nmacs;
#line 59 "cli.gaa"
+ int nmacs;
+#line 56 "cli.gaa"
char **comp;
-#line 58 "cli.gaa"
- int ncomp;
#line 55 "cli.gaa"
+ int ncomp;
+#line 52 "cli.gaa"
char **proto;
-#line 54 "cli.gaa"
- int nproto;
#line 51 "cli.gaa"
+ int nproto;
+#line 48 "cli.gaa"
char **ciphers;
-#line 50 "cli.gaa"
- int nciphers;
#line 47 "cli.gaa"
- int verbose;
+ int nciphers;
#line 44 "cli.gaa"
- int record_size;
+ int verbose;
#line 41 "cli.gaa"
- int port;
+ int record_size;
#line 38 "cli.gaa"
int print_cert;
#line 35 "cli.gaa"
@@ -312,27 +312,27 @@ static int gaa_error = 0;
#define GAAOPTID_help 3
#define GAAOPTID_list 4
#define GAAOPTID_insecure 5
-#define GAAOPTID_pskkey 6
-#define GAAOPTID_pskusername 7
-#define GAAOPTID_srppasswd 8
-#define GAAOPTID_srpusername 9
-#define GAAOPTID_x509certfile 10
-#define GAAOPTID_x509keyfile 11
-#define GAAOPTID_pgpcertfile 12
-#define GAAOPTID_pgptrustdb 13
-#define GAAOPTID_pgpkeyring 14
-#define GAAOPTID_pgpkeyfile 15
-#define GAAOPTID_x509crlfile 16
-#define GAAOPTID_x509cafile 17
-#define GAAOPTID_ctypes 18
-#define GAAOPTID_kx 19
-#define GAAOPTID_macs 20
-#define GAAOPTID_comp 21
-#define GAAOPTID_protocols 22
-#define GAAOPTID_ciphers 23
-#define GAAOPTID_verbose 24
-#define GAAOPTID_recordsize 25
-#define GAAOPTID_port 26
+#define GAAOPTID_port 6
+#define GAAOPTID_pskkey 7
+#define GAAOPTID_pskusername 8
+#define GAAOPTID_srppasswd 9
+#define GAAOPTID_srpusername 10
+#define GAAOPTID_x509certfile 11
+#define GAAOPTID_x509keyfile 12
+#define GAAOPTID_pgpcertfile 13
+#define GAAOPTID_pgptrustdb 14
+#define GAAOPTID_pgpkeyring 15
+#define GAAOPTID_pgpkeyfile 16
+#define GAAOPTID_x509crlfile 17
+#define GAAOPTID_x509cafile 18
+#define GAAOPTID_ctypes 19
+#define GAAOPTID_kx 20
+#define GAAOPTID_macs 21
+#define GAAOPTID_comp 22
+#define GAAOPTID_protocols 23
+#define GAAOPTID_ciphers 24
+#define GAAOPTID_verbose 25
+#define GAAOPTID_recordsize 26
#define GAAOPTID_print_cert 27
#define GAAOPTID_xml 28
#define GAAOPTID_disable_extensions 29
@@ -528,6 +528,12 @@ static float gaa_getfloat(char *arg)
}
/* option structures */
+struct GAAOPTION_port
+{
+ char* arg1;
+ int size1;
+};
+
struct GAAOPTION_pskkey
{
char* arg1;
@@ -642,12 +648,6 @@ struct GAAOPTION_recordsize
int size1;
};
-struct GAAOPTION_port
-{
- int arg1;
- int size1;
-};
-
struct GAAOPTION_debug
{
int arg1;
@@ -690,6 +690,7 @@ static int gaa_get_option_num(char *str, int status)
switch(status)
{
case GAA_LETTER_OPTION:
+ GAA_CHECK1STR("p", GAAOPTID_port);
GAA_CHECK1STR("", GAAOPTID_pskkey);
GAA_CHECK1STR("", GAAOPTID_pskusername);
GAA_CHECK1STR("", GAAOPTID_srppasswd);
@@ -709,7 +710,6 @@ static int gaa_get_option_num(char *str, int status)
GAA_CHECK1STR("", GAAOPTID_protocols);
GAA_CHECK1STR("", GAAOPTID_ciphers);
GAA_CHECK1STR("", GAAOPTID_recordsize);
- GAA_CHECK1STR("p", GAAOPTID_port);
GAA_CHECK1STR("d", GAAOPTID_debug);
case GAA_MULTIPLE_OPTION:
#line 375 "gaa.skel"
@@ -736,6 +736,7 @@ static int gaa_get_option_num(char *str, int status)
GAA_CHECKSTR("help", GAAOPTID_help);
GAA_CHECKSTR("list", GAAOPTID_list);
GAA_CHECKSTR("insecure", GAAOPTID_insecure);
+ GAA_CHECKSTR("port", GAAOPTID_port);
GAA_CHECKSTR("pskkey", GAAOPTID_pskkey);
GAA_CHECKSTR("pskusername", GAAOPTID_pskusername);
GAA_CHECKSTR("srppasswd", GAAOPTID_srppasswd);
@@ -756,7 +757,6 @@ static int gaa_get_option_num(char *str, int status)
GAA_CHECKSTR("ciphers", GAAOPTID_ciphers);
GAA_CHECKSTR("verbose", GAAOPTID_verbose);
GAA_CHECKSTR("recordsize", GAAOPTID_recordsize);
- GAA_CHECKSTR("port", GAAOPTID_port);
GAA_CHECKSTR("print-cert", GAAOPTID_print_cert);
GAA_CHECKSTR("xml", GAAOPTID_xml);
GAA_CHECKSTR("disable-extensions", GAAOPTID_disable_extensions);
@@ -778,6 +778,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
{
int OK = 0;
int gaa_last_non_option;
+ struct GAAOPTION_port GAATMP_port;
struct GAAOPTION_pskkey GAATMP_pskkey;
struct GAAOPTION_pskusername GAATMP_pskusername;
struct GAAOPTION_srppasswd GAATMP_srppasswd;
@@ -797,7 +798,6 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
struct GAAOPTION_protocols GAATMP_protocols;
struct GAAOPTION_ciphers GAATMP_ciphers;
struct GAAOPTION_recordsize GAATMP_recordsize;
- struct GAAOPTION_port GAATMP_port;
struct GAAOPTION_debug GAATMP_debug;
#line 393 "gaa.skel"
@@ -854,12 +854,22 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
return GAA_OK;
break;
+ case GAAOPTID_port:
+ OK = 0;
+ GAA_TESTMOREARGS;
+ GAA_FILL(GAATMP_port.arg1, gaa_getstr, GAATMP_port.size1);
+ gaa_index++;
+#line 108 "cli.gaa"
+{ gaaval->port = GAATMP_port.arg1 ;};
+
+ return GAA_OK;
+ break;
case GAAOPTID_pskkey:
OK = 0;
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_pskkey.arg1, gaa_getstr, GAATMP_pskkey.size1);
gaa_index++;
-#line 108 "cli.gaa"
+#line 105 "cli.gaa"
{ gaaval->psk_key = GAATMP_pskkey.arg1 ;};
return GAA_OK;
@@ -869,7 +879,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_pskusername.arg1, gaa_getstr, GAATMP_pskusername.size1);
gaa_index++;
-#line 105 "cli.gaa"
+#line 102 "cli.gaa"
{ gaaval->psk_username = GAATMP_pskusername.arg1 ;};
return GAA_OK;
@@ -879,7 +889,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_srppasswd.arg1, gaa_getstr, GAATMP_srppasswd.size1);
gaa_index++;
-#line 102 "cli.gaa"
+#line 99 "cli.gaa"
{ gaaval->srp_passwd = GAATMP_srppasswd.arg1 ;};
return GAA_OK;
@@ -889,7 +899,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_srpusername.arg1, gaa_getstr, GAATMP_srpusername.size1);
gaa_index++;
-#line 99 "cli.gaa"
+#line 96 "cli.gaa"
{ gaaval->srp_username = GAATMP_srpusername.arg1 ;};
return GAA_OK;
@@ -899,7 +909,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_x509certfile.arg1, gaa_getstr, GAATMP_x509certfile.size1);
gaa_index++;
-#line 96 "cli.gaa"
+#line 93 "cli.gaa"
{ gaaval->x509_certfile = GAATMP_x509certfile.arg1 ;};
return GAA_OK;
@@ -909,7 +919,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_x509keyfile.arg1, gaa_getstr, GAATMP_x509keyfile.size1);
gaa_index++;
-#line 93 "cli.gaa"
+#line 90 "cli.gaa"
{ gaaval->x509_keyfile = GAATMP_x509keyfile.arg1 ;};
return GAA_OK;
@@ -919,7 +929,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_pgpcertfile.arg1, gaa_getstr, GAATMP_pgpcertfile.size1);
gaa_index++;
-#line 90 "cli.gaa"
+#line 87 "cli.gaa"
{ gaaval->pgp_certfile = GAATMP_pgpcertfile.arg1 ;};
return GAA_OK;
@@ -929,7 +939,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_pgptrustdb.arg1, gaa_getstr, GAATMP_pgptrustdb.size1);
gaa_index++;
-#line 87 "cli.gaa"
+#line 84 "cli.gaa"
{ gaaval->pgp_trustdb = GAATMP_pgptrustdb.arg1 ;};
return GAA_OK;
@@ -939,7 +949,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_pgpkeyring.arg1, gaa_getstr, GAATMP_pgpkeyring.size1);
gaa_index++;
-#line 84 "cli.gaa"
+#line 81 "cli.gaa"
{ gaaval->pgp_keyring = GAATMP_pgpkeyring.arg1 ;};
return GAA_OK;
@@ -949,7 +959,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_pgpkeyfile.arg1, gaa_getstr, GAATMP_pgpkeyfile.size1);
gaa_index++;
-#line 81 "cli.gaa"
+#line 78 "cli.gaa"
{ gaaval->pgp_keyfile = GAATMP_pgpkeyfile.arg1 ;};
return GAA_OK;
@@ -959,7 +969,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_x509crlfile.arg1, gaa_getstr, GAATMP_x509crlfile.size1);
gaa_index++;
-#line 78 "cli.gaa"
+#line 75 "cli.gaa"
{ gaaval->x509_crlfile = GAATMP_x509crlfile.arg1 ;};
return GAA_OK;
@@ -969,7 +979,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_x509cafile.arg1, gaa_getstr, GAATMP_x509cafile.size1);
gaa_index++;
-#line 75 "cli.gaa"
+#line 72 "cli.gaa"
{ gaaval->x509_cafile = GAATMP_x509cafile.arg1 ;};
return GAA_OK;
@@ -977,7 +987,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
case GAAOPTID_ctypes:
OK = 0;
GAA_LIST_FILL(GAATMP_ctypes.arg1, gaa_getstr, char*, GAATMP_ctypes.size1);
-#line 72 "cli.gaa"
+#line 69 "cli.gaa"
{ gaaval->ctype = GAATMP_ctypes.arg1; gaaval->nctype = GAATMP_ctypes.size1 ;};
return GAA_OK;
@@ -985,7 +995,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
case GAAOPTID_kx:
OK = 0;
GAA_LIST_FILL(GAATMP_kx.arg1, gaa_getstr, char*, GAATMP_kx.size1);
-#line 68 "cli.gaa"
+#line 65 "cli.gaa"
{ gaaval->kx = GAATMP_kx.arg1; gaaval->nkx = GAATMP_kx.size1 ;};
return GAA_OK;
@@ -993,7 +1003,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
case GAAOPTID_macs:
OK = 0;
GAA_LIST_FILL(GAATMP_macs.arg1, gaa_getstr, char*, GAATMP_macs.size1);
-#line 64 "cli.gaa"
+#line 61 "cli.gaa"
{ gaaval->macs = GAATMP_macs.arg1; gaaval->nmacs = GAATMP_macs.size1 ;};
return GAA_OK;
@@ -1001,7 +1011,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
case GAAOPTID_comp:
OK = 0;
GAA_LIST_FILL(GAATMP_comp.arg1, gaa_getstr, char*, GAATMP_comp.size1);
-#line 60 "cli.gaa"
+#line 57 "cli.gaa"
{ gaaval->comp = GAATMP_comp.arg1; gaaval->ncomp = GAATMP_comp.size1 ;};
return GAA_OK;
@@ -1009,7 +1019,7 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
case GAAOPTID_protocols:
OK = 0;
GAA_LIST_FILL(GAATMP_protocols.arg1, gaa_getstr, char*, GAATMP_protocols.size1);
-#line 56 "cli.gaa"
+#line 53 "cli.gaa"
{ gaaval->proto = GAATMP_protocols.arg1; gaaval->nproto = GAATMP_protocols.size1 ;};
return GAA_OK;
@@ -1017,14 +1027,14 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
case GAAOPTID_ciphers:
OK = 0;
GAA_LIST_FILL(GAATMP_ciphers.arg1, gaa_getstr, char*, GAATMP_ciphers.size1);
-#line 52 "cli.gaa"
+#line 49 "cli.gaa"
{ gaaval->ciphers = GAATMP_ciphers.arg1; gaaval->nciphers = GAATMP_ciphers.size1 ;};
return GAA_OK;
break;
case GAAOPTID_verbose:
OK = 0;
-#line 48 "cli.gaa"
+#line 45 "cli.gaa"
{ gaaval->verbose = 1 ;};
return GAA_OK;
@@ -1034,18 +1044,8 @@ static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
GAA_TESTMOREARGS;
GAA_FILL(GAATMP_recordsize.arg1, gaa_getint, GAATMP_recordsize.size1);
gaa_index++;
-#line 45 "cli.gaa"
-{ gaaval->record_size = GAATMP_recordsize.arg1 ;};
-
- return GAA_OK;
- break;
- case GAAOPTID_port:
- OK = 0;
- GAA_TESTMOREARGS;
- GAA_FILL(GAATMP_port.arg1, gaa_getint, GAATMP_port.size1);
- gaa_index++;
#line 42 "cli.gaa"
-{ gaaval->port = GAATMP_port.arg1 ;};
+{ gaaval->record_size = GAATMP_recordsize.arg1 ;};
return GAA_OK;
break;
@@ -1149,7 +1149,7 @@ int gaa(int argc, char **argv, gaainfo *gaaval)
{
#line 122 "cli.gaa"
-{ gaaval->resume=0; gaaval->port=443; gaaval->rest_args=NULL; gaaval->ciphers=NULL;
+{ gaaval->resume=0; gaaval->port="443"; gaaval->rest_args=NULL; gaaval->ciphers=NULL;
gaaval->kx=NULL; gaaval->comp=NULL; gaaval->macs=NULL; gaaval->ctype=NULL; gaaval->nciphers=0;
gaaval->nkx=0; gaaval->ncomp=0; gaaval->nmacs=0; gaaval->nctype = 0; gaaval->record_size=0;
gaaval->fingerprint=0; gaaval->pgp_trustdb=NULL; gaaval->pgp_keyring=NULL; gaaval->x509_crlfile = NULL;
diff --git a/src/cli-gaa.h b/src/cli-gaa.h
index c51b08dde2..012ba4f4aa 100644
--- a/src/cli-gaa.h
+++ b/src/cli-gaa.h
@@ -13,59 +13,59 @@ struct _gaainfo
#line 110 "cli.gaa"
int insecure;
#line 107 "cli.gaa"
- char *psk_key;
+ char *port;
#line 104 "cli.gaa"
- char *psk_username;
+ char *psk_key;
#line 101 "cli.gaa"
- char *srp_passwd;
+ char *psk_username;
#line 98 "cli.gaa"
- char *srp_username;
+ char *srp_passwd;
#line 95 "cli.gaa"
- char *x509_certfile;
+ char *srp_username;
#line 92 "cli.gaa"
- char *x509_keyfile;
+ char *x509_certfile;
#line 89 "cli.gaa"
- char *pgp_certfile;
+ char *x509_keyfile;
#line 86 "cli.gaa"
- char *pgp_trustdb;
+ char *pgp_certfile;
#line 83 "cli.gaa"
- char *pgp_keyring;
+ char *pgp_trustdb;
#line 80 "cli.gaa"
- char *pgp_keyfile;
+ char *pgp_keyring;
#line 77 "cli.gaa"
- char *x509_crlfile;
+ char *pgp_keyfile;
#line 74 "cli.gaa"
- char *x509_cafile;
+ char *x509_crlfile;
#line 71 "cli.gaa"
+ char *x509_cafile;
+#line 68 "cli.gaa"
char **ctype;
-#line 70 "cli.gaa"
- int nctype;
#line 67 "cli.gaa"
+ int nctype;
+#line 64 "cli.gaa"
char **kx;
-#line 66 "cli.gaa"
- int nkx;
#line 63 "cli.gaa"
+ int nkx;
+#line 60 "cli.gaa"
char **macs;
-#line 62 "cli.gaa"
- int nmacs;
#line 59 "cli.gaa"
+ int nmacs;
+#line 56 "cli.gaa"
char **comp;
-#line 58 "cli.gaa"
- int ncomp;
#line 55 "cli.gaa"
+ int ncomp;
+#line 52 "cli.gaa"
char **proto;
-#line 54 "cli.gaa"
- int nproto;
#line 51 "cli.gaa"
+ int nproto;
+#line 48 "cli.gaa"
char **ciphers;
-#line 50 "cli.gaa"
- int nciphers;
#line 47 "cli.gaa"
- int verbose;
+ int nciphers;
#line 44 "cli.gaa"
- int record_size;
+ int verbose;
#line 41 "cli.gaa"
- int port;
+ int record_size;
#line 38 "cli.gaa"
int print_cert;
#line 35 "cli.gaa"
diff --git a/src/cli.c b/src/cli.c
index 3d8cf1d88c..2637606fed 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -54,7 +54,7 @@
/* global stuff here */
int resume, starttls, insecure;
char *hostname = NULL;
-int port;
+char* service;
int record_max_size;
int fingerprint;
int crlf;
@@ -494,7 +494,7 @@ main (int argc, char **argv)
fd_set rset;
int maxfd;
struct timeval tv;
- int user_term = 0;
+ int user_term = 0, port;
struct hostent *server_host;
socket_st hd;
@@ -526,6 +526,12 @@ main (int argc, char **argv)
sd = socket (AF_INET, SOCK_STREAM, 0);
ERR (sd, "socket");
+ port = service_to_port( service);
+ if (port == -1) {
+ fprintf(stderr, "Unknown service\n");
+ return -1;
+ }
+
memset (&sa, '\0', sizeof (sa));
sa.sin_family = AF_INET;
sa.sin_port = htons (port);
@@ -773,7 +779,7 @@ gaa_parser (int argc, char **argv)
starttls = info.starttls;
resume = info.resume;
insecure = info.insecure;
- port = info.port;
+ service = info.port;
record_max_size = info.record_size;
fingerprint = info.fingerprint;
diff --git a/src/cli.gaa b/src/cli.gaa
index 787307e150..0138146d00 100644
--- a/src/cli.gaa
+++ b/src/cli.gaa
@@ -38,9 +38,6 @@ option (xml) { $xml = 1 } "Print the certificate information in XML format."
#int print_cert;
option (print-cert) { $print_cert = 1 } "Print the certificate in PEM format."
-#int port;
-option (p, port) INT "integer" { $port = $1 } "The port to connect to."
-
#int record_size;
option (recordsize) INT "integer" { $record_size = $1 } "The maximum record size to advertize."
@@ -107,6 +104,9 @@ option (pskusername) STR "NAME" { $psk_username = $1 } "PSK username to use."
#char *psk_key;
option (pskkey) STR "KEY" { $psk_key = $1 } "PSK key (in hex) to use."
+#char *port;
+option (p, port) STR "PORT" { $port = $1 } "The port to connect to."
+
#int insecure;
option (insecure) { $insecure = 1 } "Don't abort program if server certificate can't be validated."
@@ -119,7 +119,7 @@ option ( copyright) { print_license(); exit(0); } "prints the program's license"
#char *rest_args;
rest STR "hostname" { $rest_args = $1; }
-init { $resume=0; $port=443; $rest_args=NULL; $ciphers=NULL;
+init { $resume=0; $port="443"; $rest_args=NULL; $ciphers=NULL;
$kx=NULL; $comp=NULL; $macs=NULL; $ctype=NULL; $nciphers=0;
$nkx=0; $ncomp=0; $nmacs=0; $nctype = 0; $record_size=0;
$fingerprint=0; $pgp_trustdb=NULL; $pgp_keyring=NULL; $x509_crlfile = NULL;
diff --git a/src/common.c b/src/common.c
index 02de9203de..eec613d165 100644
--- a/src/common.c
+++ b/src/common.c
@@ -817,3 +817,26 @@ sockets_init (void)
}
#endif
}
+
+/* converts a service name or a port (in string) to a
+ * port number. The protocol is assumed to be TCP.
+ *
+ * returns -1 on error;
+ */
+int service_to_port( const char* service)
+{
+int port;
+struct servent *server_port;
+
+ port = atoi(service);
+ if (port!=0) return port;
+
+ server_port = getservbyname( service, "tcp");
+ if (server_port == NULL) {
+ perror("getservbyname()");
+ return(-1);
+ }
+
+ return ntohs(server_port->s_port);
+
+}
diff --git a/src/common.h b/src/common.h
index fb1cc9105a..acc313054b 100644
--- a/src/common.h
+++ b/src/common.h
@@ -35,6 +35,7 @@ void parse_ciphers (char **ciphers, int nciphers, int *cipher_priority);
void parse_protocols (char **protocols, int protocols_size,
int *protocol_priority);
const char *raw_to_string (const unsigned char *raw, size_t raw_size);
+int service_to_port( const char* service);
void sockets_init (void);