Commit 567a68fd 567a68fd897da7ad69bc05b5ca1b62c371d52761 by Alain Magloire

doc fixes.

1 parent 750120a9
......@@ -25,6 +25,10 @@
a long AC_CHECK_LIB, break it in two.
Check for strsignal()
* doc/auth.texi: Bug fixes in texinfo.
* doc/Makefile.am: Commented the ex-address.texi generation.
* doc/ex-address.texi: New file.
2001-05-21 Alain Magloire
* configure.in, imap4d/signal.c, pop3d/signal.c:
......
info_TEXINFOS = \
mailutils.texi
info_TEXINFOS = mailutils.texi
EXTRA_DIST = \
rfc1734.txt \
......@@ -13,6 +12,7 @@ EXTRA_DIST = \
auth.texi \
body.texi \
encoding.texi \
ex-address.texi \
headers.texi \
locker.texi \
mailbox.texi \
......@@ -23,6 +23,11 @@ EXTRA_DIST = \
url.texi \
version.texi
ex-address.texi: ${top_srdir}/examples/addr.c
sed -es/{/@{/g -e s/}/@}/g < $< > $@
## Sam, the examples dir is not part of the distribution so this will not work
## but we should probably have a "addrmsg" program and reenable this.
## Alain.
#ex-address.texi: ${top_srcdir}/examples/addr.c
# sed -es/{/@{/g -e s/}/@}/g < $< > $@
#mailutils.info: mailutils.texi version.texi ex-address.texi
#mailutils.dvi: mailutils.texi version.texi ex-address.texi
......
There are many ways to authenticate to a server, to be flexible the
authentication process is provided by two objects @code{auth_t} and
@{ticket_t}. The @{auth_t} can implement different protocol like
@code{ticket_t}. The @code{auth_t} can implement different protocol like
APOP, MD5-AUTH, One Time Passwd etc .. By default if a mailbox
does not understand or know how to authenticate it falls back to
user/passwd authentication. The @{ticket_t} is away to
user/passwd authentication. The @code{ticket_t} is away to
Mailboxes and Mailers provide a way to authenticate when the URL does not
contain enough information. The default action is to call function
@code{auth_authenticate} who will get the @emph{user} and @emph{passwd}
......
#include <stdio.h>
#include <errno.h>
#include <mailutils/address.h>
#define EPARSE ENOENT
static const char* err_name(int e)
@{
struct @{
int e;
const char* s;
@} map[] = @{
#define E(e) @{ e, #e @},
E(ENOENT)
E(EINVAL)
E(ENOMEM)
#undef E
@{ 0, NULL @}
@};
static char s[sizeof(int) * 8 + 3];
int i;
for(i = 0; map[i].s; i++) @{
if(map[i].e == e)
return map[i].s;
@}
sprintf(s, "[%d]", e);
return s;
@}
static int parse(const char* str)
@{
size_t no = 0;
size_t pcount = 0;
int status;
char buf[BUFSIZ];
address_t address = NULL;
status = address_create(&address, str);
address_get_count(address, &pcount);
if(status) @{
printf("%s=> error %s\n\n", str, err_name(status));
return 0;
@} else @{
printf("%s=> pcount %d\n", str, pcount);
@}
for(no = 1; no <= pcount; no++) @{
size_t got = 0;
int isgroup;
address_is_group(address, no, &isgroup);
printf("%d ", no);
if(isgroup) @{
address_get_personal(address, no, buf, sizeof(buf), &got);
printf("group <%s>\n", buf);
@} else @{
address_get_email(address, no, buf, sizeof(buf), 0);
printf("email <%s>\n", buf);
@}
address_get_personal(address, no, buf, sizeof(buf), &got);
if(got && !isgroup) printf(" personal <%s>\n", buf);
address_get_comments(address, no, buf, sizeof(buf), &got);
if(got) printf(" comments <%s>\n", buf);
address_get_local_part(address, no, buf, sizeof(buf), &got);
if(got) @{
printf(" local-part <%s>", buf);
address_get_domain(address, no, buf, sizeof(buf), &got);
if(got) printf(" domain <%s>", buf);
printf("\n");
@}
address_get_route(address, no, buf, sizeof(buf), &got);
if(got) printf(" route <%s>\n", buf);
@}
address_destroy(&address);
printf("\n");
return 0;
@}
static int parseinput(void)
@{
char buf[BUFSIZ];
while(fgets(buf, sizeof(buf), stdin) != 0) @{
buf[strlen(buf) - 1] = 0;
parse(buf);
@}
return 0;
@}
int main(int argc, const char *argv[])
@{
argc = 1;
if(!argv[argc]) @{
return parseinput();
@}
for(; argv[argc]; argc++) @{
if(strcmp(argv[argc], "-") == 0) @{
parseinput();
@} else @{
parse(argv[argc]);
@}
@}
return 0;
@}