summaryrefslogtreecommitdiff
path: root/alpine/arg.c
diff options
context:
space:
mode:
Diffstat (limited to 'alpine/arg.c')
-rw-r--r--alpine/arg.c65
1 files changed, 44 insertions, 21 deletions
diff --git a/alpine/arg.c b/alpine/arg.c
index 1971e802..25419b30 100644
--- a/alpine/arg.c
+++ b/alpine/arg.c
@@ -83,7 +83,9 @@ static char args_err_missing_copyabook[] = N_("missing argument for option \"-co
static char args_err_missing_server_name[] = N_("missing server name. Example: -xoauth2-server Gmail");
static char args_err_missing_client_id[] = N_("missing client-id name. Example: -xoauth2-client-id 760.someserver.com");
static char args_err_missing_client_secret[] = N_("missing client-secret name. Example: -xoauth2-client-secret V56i0fa_");
-static char args_err_missing_xoauth_option[] = N_("at least one of the arguments -xoauth2-server, or -xoauth2-client-id, or -xoauth2-client-secret is missing.");
+static char args_err_missing_tenant[] = N_("missing tenant value. Example: -xoauth2-tenant common");
+static char args_err_missing_user[] = N_("missing username value. Example: -xoauth2-user user@example.com");
+static char args_err_missing_xoauth_option[] = N_("at least one of the arguments -xoauth2-server, or -xoauth2-client-id, xoauth2-tenant, or -xoauth2-client-secret is missing.");
static char *args_pine_args[] = {
N_("Possible Starting Arguments for Alpine program:"),
@@ -217,9 +219,7 @@ pine_args(struct pine *pine_state, int argc, char **argv, ARGDATA_S *args)
char *sort = NULL;
char *pinerc_file = NULL;
char *lc = NULL;
- char *xoauth2_server = NULL;
- char *xoauth2_client_id = NULL;
- char *xoauth2_client_secret = NULL;
+ XOAUTH2_INFO_S x;
int do_help = 0;
int do_conf = 0;
int usage = 0;
@@ -232,6 +232,7 @@ pine_args(struct pine *pine_state, int argc, char **argv, ARGDATA_S *args)
av = argv;
memset(args, 0, sizeof(ARGDATA_S));
args->action = aaFolder;
+ memset((void *) &x, 0, sizeof(XOAUTH2_INFO_S));
pine_state->pine_name = (lc = last_cmpnt(argv[0])) ? lc : (lc = argv[0]);
#ifdef DOS
@@ -556,9 +557,9 @@ Loop: while(--ac > 0)
else if(strcmp(*av, "xoauth2-server") == 0){
if(--ac){
if((str = *++av) != NULL){
- if(xoauth2_server)
- fs_give((void **) &xoauth2_server);
- xoauth2_server = cpystr(str);
+ if(x.name)
+ fs_give((void **) &x.name);
+ x.name = cpystr(str);
}
}
else{
@@ -570,9 +571,9 @@ Loop: while(--ac > 0)
else if(strcmp(*av, "xoauth2-client-id") == 0){
if(--ac){
if((str = *++av) != NULL){
- if(xoauth2_client_id)
- fs_give((void **) &xoauth2_client_id);
- xoauth2_client_id = cpystr(str);
+ if(x.client_id)
+ fs_give((void **) &x.client_id);
+ x.client_id = cpystr(str);
}
}
else{
@@ -584,9 +585,9 @@ Loop: while(--ac > 0)
else if(strcmp(*av, "xoauth2-client-secret") == 0){
if(--ac){
if((str = *++av) != NULL){
- if(xoauth2_client_secret)
- fs_give((void **) &xoauth2_client_secret);
- xoauth2_client_secret = cpystr(str);
+ if(x.client_secret)
+ fs_give((void **) &x.client_secret);
+ x.client_secret = cpystr(str);
}
}
else{
@@ -595,6 +596,34 @@ Loop: while(--ac > 0)
}
goto Loop;
}
+ else if(strcmp(*av, "xoauth2-tenant") == 0){
+ if(--ac){
+ if((str = *++av) != NULL){
+ if(x.tenant)
+ fs_give((void **) &x.tenant);
+ x.tenant = cpystr(str);
+ }
+ }
+ else{
+ display_args_err(_(args_err_missing_tenant), NULL, 1);
+ ++usage;
+ }
+ goto Loop;
+ }
+ else if(strcmp(*av, "xoauth2-user") == 0){
+ if(--ac){
+ if((str = *++av) != NULL){
+ if(x.users)
+ fs_give((void **) &x.users);
+ x.users = cpystr(str);
+ }
+ }
+ else{
+ display_args_err(_(args_err_missing_user), NULL, 1);
+ ++usage;
+ }
+ goto Loop;
+ }
#ifdef _WINDOWS
else if(strcmp(*av, "install") == 0){
pine_state->install_flag = 1;
@@ -942,21 +971,15 @@ Loop: while(--ac > 0)
exit(-1);
}
- if((xoauth2_server || xoauth2_client_id || xoauth2_client_secret)
- && !(xoauth2_server && xoauth2_client_id && xoauth2_client_secret)){
- display_args_err(_(args_err_missing_xoauth_option), NULL, 1);
- ++usage;
- }
-
if(do_help || usage)
args_help();
if(usage)
exit(-1);
- if(xoauth2_server){
+ if(x.name){
char *tmp1, *tmp2;
- tmp2 = xoauth_config_line(xoauth2_server, xoauth2_client_id, xoauth2_client_secret);
+ tmp2 = xoauth_config_line(&x);
if(tmp2){
tmp1 = fs_get((strlen(ps_global->vars[V_XOAUTH2_INFO].name) + strlen(tmp2) + 2)*sizeof(char));
if(tmp1){