Integrated Bill Sommerfeld's kinit lifetime parsing changes
authorTheodore Tso <tytso@mit.edu>
Wed, 2 Oct 1991 17:23:55 +0000 (17:23 +0000)
committerTheodore Tso <tytso@mit.edu>
Wed, 2 Oct 1991 17:23:55 +0000 (17:23 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2192 dc483132-0cff-0310-8789-dd5450dbe970

src/clients/kinit/kinit.c

index db7d30c1810c13ee11cd1e30fb8dffac0dd7fb17..024d42abd32d024493b6ab58c77955fe516c843d 100644 (file)
@@ -50,7 +50,7 @@ krb5_parse_lifetime (time, len)
     char *time;
     long *len;
 {
-    *len = atoi (time) * 60 * 60; /* XXX stub version */
+    *len = convtime(time);
     return 0;
 }
     
@@ -196,3 +196,65 @@ main(argc, argv)
     }
     exit(0);
 }
+
+/*
+ * this next function was lifted from the source to sendmail, which is:
+ * 
+ * Copyright (c) 1983 Eric P. Allman
+ * Copyright (c) 1988 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted provided
+ * that: (1) source distributions retain this entire copyright notice and
+ * comment, and (2) distributions including binaries display the following
+ * acknowledgement:  ``This product includes software developed by the
+ * University of California, Berkeley and its contributors'' in the
+ * documentation or other materials provided with the distribution and in
+ * all advertising materials mentioning features or use of this software.
+ * Neither the name of the University nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+time_t
+convtime(p)
+        char *p;
+{
+        register time_t t, r;
+        register char c;
+
+        r = 0;
+        while (*p != '\0')
+        {
+                t = 0;
+                while (isdigit(c = *p++))
+                        t = t * 10 + (c - '0');
+                if (c == '\0')
+                        p--;
+                switch (c)
+                {
+                  case 'w':             /* weeks */
+                        t *= 7;
+
+                  case 'd':             /* days */
+                        t *= 24;
+
+                  case 'h':             /* hours */
+                  default:
+                        t *= 60;
+
+                  case 'm':             /* minutes */
+                        t *= 60;
+
+                  case 's':             /* seconds */
+                        break;
+                }
+                r += t;
+        }
+
+        return (r);
+}
+