Support for Kerberos auth
authoradamch <adamch>
Thu, 17 May 2007 18:44:27 +0000 (18:44 +0000)
committeradamch <adamch>
Thu, 17 May 2007 18:44:27 +0000 (18:44 +0000)
config.sig
config.sml
init.sml

index 1fe37f8..d3ca805 100644 (file)
@@ -5,5 +5,6 @@ val urlPrefix : string
 val emailSuffix : string
 val boardEmail : string
 val dbstring : string
+val kerberosSuffix : string
 
 end
index 25a4cdb..ab7cfec 100644 (file)
@@ -7,4 +7,6 @@ val boardEmail = "board" ^ emailSuffix
 
 val dbstring = "dbname='hcoop_hcoop' user='www-data'"
 
+val kerberosSuffix = "@HCOOP.NET"
+
 end
index d6aae9c..9352b3e 100644 (file)
--- a/init.sml
+++ b/init.sml
@@ -43,32 +43,40 @@ fun init () =
        case Web.getCgi "REMOTE_USER" of
            NONE => raise Fail "Not logged in"
          | SOME name =>
-           (case C.oneOrNoRows c ($`SELECT id, name, rname, bal, joined, app, shares
-                                    FROM WebUserActive
-                                    WHERE name=^(C.stringToSql name)`) of
-                NONE => raise Fail "User not found"
-              | SOME r =>
-                let
-                    val r = mkUserRow r
-                in
-                    user := SOME r;
-                    case C.oneOrNoRows c ($`SELECT ipaddr
+           let
+               val name =
+                   if String.isSuffix kerberosSuffix name then
+                       String.substring (name, 0, size name - size kerberosSuffix)
+                   else
+                       name
+           in
+               case C.oneOrNoRows c ($`SELECT id, name, rname, bal, joined, app, shares
+                                       FROM WebUserActive
+                                       WHERE name=^(C.stringToSql name)`) of
+                   NONE => raise Fail "User not found"
+                 | SOME r =>
+                   let
+                       val r = mkUserRow r
+                   in
+                       user := SOME r;
+                       case C.oneOrNoRows c ($`SELECT ipaddr
                                                FROM MemberApp
                                                WHERE id = ^(C.intToSql (#app r))
-                                                  AND ipaddr IS NOT NULL`) of
-                        NONE =>
-                        if Web.getParam "agree" = "on" then
-                            (case Web.getCgi "REMOTE_ADDR" of
-                                 NONE => raise Fail "REMOTE_ADDR not set"
-                               | SOME ra =>
-                                 ignore (C.dml c ($`UPDATE MemberApp
+                                                               AND ipaddr IS NOT NULL`) of
+                           NONE =>
+                           if Web.getParam "agree" = "on" then
+                               (case Web.getCgi "REMOTE_ADDR" of
+                                    NONE => raise Fail "REMOTE_ADDR not set"
+                                  | SOME ra =>
+                                    ignore (C.dml c ($`UPDATE MemberApp
                                                        SET ipaddr = ^(C.stringToSql ra),
-                                                           applied = CURRENT_TIMESTAMP
-                                                       WHERE id = ^(C.intToSql (#app r))`)))
-                        else
-                            raise NeedTos
-                      | _ => ()
-                end)
+                                                         applied = CURRENT_TIMESTAMP
+                                                       WHERE id = ^(C.intToSql (#app r))`)))
+                           else
+                               raise NeedTos
+                         | _ => ()
+                   end
+           end
     end
 
 fun done () =