diff options
Diffstat (limited to 'web/src/alpined.d/alpineldap.c')
-rw-r--r-- | web/src/alpined.d/alpineldap.c | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/web/src/alpined.d/alpineldap.c b/web/src/alpined.d/alpineldap.c new file mode 100644 index 00000000..c29ef7f4 --- /dev/null +++ b/web/src/alpined.d/alpineldap.c @@ -0,0 +1,181 @@ +#if !defined(lint) && !defined(DOS) +static char rcsid[] = "$Id: alpineldap.c 1204 2009-02-02 19:54:23Z hubert@u.washington.edu $"; +#endif + +/* ======================================================================== + * Copyright 2006-2007 University of Washington + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * ======================================================================== + */ + +#include <system.h> +#include <general.h> + +#include "../../../c-client/c-client.h" +#include "../../../c-client/imap4r1.h" + +#include "../../../pith/osdep/color.h" /* color support library */ +#include "../../../pith/osdep/canaccess.h" +#include "../../../pith/osdep/temp_nam.h" + +#include "../../../pith/stream.h" +#include "../../../pith/context.h" +#include "../../../pith/state.h" +#include "../../../pith/msgno.h" +#include "../../../pith/debug.h" +#include "../../../pith/init.h" +#include "../../../pith/conf.h" +#include "../../../pith/conftype.h" +#include "../../../pith/detoken.h" +#include "../../../pith/flag.h" +#include "../../../pith/help.h" +#include "../../../pith/remote.h" +#include "../../../pith/status.h" +#include "../../../pith/mailcmd.h" +#include "../../../pith/savetype.h" +#include "../../../pith/save.h" +#include "../../../pith/reply.h" +#include "../../../pith/sort.h" +#include "../../../pith/ldap.h" +#include "../../../pith/addrbook.h" +#include "../../../pith/takeaddr.h" +#include "../../../pith/bldaddr.h" +#include "../../../pith/copyaddr.h" +#include "../../../pith/thread.h" +#include "../../../pith/folder.h" +#include "../../../pith/mailview.h" +#include "../../../pith/indxtype.h" +#include "../../../pith/mailindx.h" +#include "../../../pith/mailpart.h" +#include "../../../pith/mimedesc.h" +#include "../../../pith/detach.h" +#include "../../../pith/newmail.h" +#include "../../../pith/charset.h" +#include "../../../pith/util.h" +#include "../../../pith/rfc2231.h" +#include "../../../pith/string.h" +#include "../../../pith/send.h" + +#include "alpined.h" +#include "ldap.h" + +struct pine *ps_global; /* THE global variable! */ +char tmp_20k_buf[20480]; + +char *peSocketName; + +#ifdef ENABLE_LDAP +WPLDAP_S *wpldap_global; +#endif + +int peNoPassword, peCredentialError; +int peCertQuery, peCertFailure; +char peCredentialRequestor[CRED_REQ_SIZE]; +STRLIST_S *peCertHosts; + +void +sml_addmsg(priority, text) + int priority; + char *text; +{ +} + +void +peDestroyUserContext(pps) + struct pine **pps; +{ +} + +int +main(argc, argv) + int argc; + char *argv[]; +{ +#ifdef ENABLE_LDAP + struct pine *pine_state; + char *p = NULL, *userid = NULL, *domain = NULL, *pname; + struct variable *vars; + int i, usage = 0, rv = 0; + + pine_state = new_pine_struct(); + ps_global = pine_state; + vars = ps_global->vars; + debug = 0; + + for(i = 1 ; i < argc; i++){ + if(*argv[i] == '-'){ + switch (argv[i++][1]) { + case 'p': + p = argv[i]; + break; + case 'u': + userid = argv[i]; + break; + case 'd': + domain = argv[i]; + break; + default: + usage = rv = 1; + break; + } + } + else + usage = rv = 1; + if(usage == 1) break; + } + if(argc == 1) usage = rv = 1; + if (usage == 1 || !p || !userid){ + usage = rv = 1; + goto done; + } + wpldap_global = (WPLDAP_S *)fs_get(sizeof(WPLDAP_S)); + wpldap_global->query_no = 0; + wpldap_global->ldap_search_list = NULL; + + ps_global->pconf = new_pinerc_s(p); + if(ps_global->pconf) + read_pinerc(ps_global->pconf, vars, ParseGlobal); + else { + fprintf(stderr, "Failed to read pineconf\n"); + rv = 1; + goto done; + } + set_current_val(&ps_global->vars[V_LDAP_SERVERS], FALSE, FALSE); + set_current_val(&ps_global->vars[V_USER_DOMAIN], FALSE, FALSE); + if(!ps_global->VAR_USER_DOMAIN && !domain){ + fprintf(stderr, "No domain set in pineconf\n"); + usage = 1; + goto done; + } + if((pname = peLdapPname(userid, domain ? domain : ps_global->VAR_USER_DOMAIN)) != NULL){ + fprintf(stdout, "%s\n", pname); + fs_give((void **)&pname); + } + else + fprintf(stdout, "\n"); + +done: + if(usage) + fprintf(stderr, "usage: pineldap -u userid -p pineconf [-d domain]\n"); + if(wpldap_global){ + if(wpldap_global->ldap_search_list) + free_wpldapres(wpldap_global->ldap_search_list); + fs_give((void **)&wpldap_global); + } + if(ps_global->pconf) + free_pinerc_s(&ps_global->pconf); + free_pine_struct(&pine_state); + + exit(rv); +#else + fprintf(stderr, "%s: Not built with LDAP support\n", argv[0]); + exit(-1); +#endif +} + |