(_shishi_crypto_init): Fix prototype, from Nicolas Pouvesle
[shishi.git] / lib / gztime.c
blob6334b06b742ab5090bbef9d84c81960cc9ad3dac
1 /* gztime.c convert into GeneralizedTime
2 * Copyright (C) 2002, 2003 Simon Josefsson
4 * This file is part of Shishi.
6 * Shishi is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Shishi is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Shishi; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "internal.h"
23 #include "timegm.h"
25 /**
26 * shishi_generalize_time:
27 * @handle: shishi handle as allocated by shishi_init().
28 * @t: C time to convert.
30 * Convert C time to KerberosTime. The string must not be deallocate
31 * by caller.
33 * Return value: Return a KerberosTime time string corresponding to C time t.
34 **/
35 const char *
36 shishi_generalize_time (Shishi * handle, time_t t)
38 struct tm *tm;
40 tm = gmtime (&t);
41 strftime (handle->gztime_buf, sizeof (handle->gztime_buf),
42 "%Y%m%d%H%M%SZ", tm);
44 return handle->gztime_buf;
47 /**
48 * shishi_generalize_now:
49 * @handle: shishi handle as allocated by shishi_init().
51 * Convert current time to KerberosTime. The string must not be
52 * deallocate by caller.
54 * Return value: Return a KerberosTime time string corresponding to
55 * current time.
56 **/
57 const char *
58 shishi_generalize_now (Shishi * handle)
60 time_t t = xtime (NULL);
62 return shishi_generalize_time (handle, t);
65 /**
66 * shishi_generalize_ctime:
67 * @handle: shishi handle as allocated by shishi_init().
68 * @t: KerberosTime to convert.
70 * Convert KerberosTime to C time.
72 * Return value: Returns C time corresponding to KerberosTime t.
73 **/
74 time_t
75 shishi_generalize_ctime (Shishi * handle, const char *t)
77 struct tm tm;
78 time_t ct;
80 memset (&tm, 0, sizeof (tm));
82 sscanf (t, "%4u%2u%2u%2u%2u%2uZ",
83 &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
84 &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
85 tm.tm_year -= 1900;
86 tm.tm_mon--;
88 ct = timegm (&tm);
90 return ct;
93 /**
94 * shishi_time_get:
95 * @handle: shishi handle as allocated by shishi_init().
96 * @node: ASN.1 node to get time from.
97 * @field: Name of field in ASN.1 node to get time from.
98 * @time: newly allocated output array with zero terminated time string.
100 * Extract time from ASN.1 structure.
102 * Return value: Returns SHISHI_OK iff successful.
105 shishi_time (Shishi * handle, Shishi_asn1 node,
106 const char *field, char **time)
108 size_t len;
109 int res;
111 len = GENERALIZEDTIME_TIME_LEN + 1;
112 *time = xmalloc (len);
114 res = shishi_asn1_read (handle, node, field, *time, &len);
115 if (res != SHISHI_OK)
116 return res;
118 if (len == GENERALIZEDTIME_TIME_LEN)
120 shishi_error_printf (handle, "Read time too short (%s)", *time);
121 return SHISHI_ASN1_ERROR;
124 (*time)[len] = '\0';
126 return SHISHI_OK;