]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
KfW GUI -- show ticket flags
authorKevin Wasserman <kevin.wasserman@painless-security.com>
Wed, 27 Jun 2012 23:05:22 +0000 (19:05 -0400)
committerTom Yu <tlyu@mit.edu>
Mon, 27 Aug 2012 23:27:40 +0000 (19:27 -0400)
Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
(cherry picked from commit ae2b7f989b34e14d03005fb5f45f3314ddab84b9)

ticket: 7280
status: resolved

src/windows/leash/LeashView.cpp

index 11902dd522bcf3aa4a464419fd846498f8203027..be4a8a51f272c21e0c316ab839d232083a89d8b4 100644 (file)
@@ -151,6 +151,47 @@ ViewColumnInfo CLeashView::sm_viewColumns[] =
     {"Flags", false, ID_SHOW_TICKET_FLAGS, 100},         // TICKET_FLAGS
 };
 
+static struct TicketFlag {
+    unsigned long m_flag;
+    const LPTSTR m_description;
+} sm_TicketFlags[] =
+{
+    {TKT_FLG_FORWARDABLE, _T("Forwardable")},
+    {TKT_FLG_FORWARDED, _T("Forwarded")},
+    {TKT_FLG_PROXIABLE, _T("Proxiable")},
+    {TKT_FLG_PROXY, _T("Proxy")},
+    {TKT_FLG_RENEWABLE, _T("Renewable")},
+};
+
+static void krb5TicketFlagsToString(unsigned long flags, LPTSTR *outStr)
+{
+    const int numFlags = sizeof(sm_TicketFlags) / sizeof(sm_TicketFlags[0]);
+    int strSize = 1;
+    LPTSTR str;
+    // pass 1: compute size
+    for (int i = 0; i < numFlags; i++) {
+        if (flags & sm_TicketFlags[i].m_flag) {
+            if (strSize > 1)
+                strSize += 2;
+            strSize += strlen(sm_TicketFlags[i].m_description);
+        }
+    }
+    // allocate
+    str = (LPSTR)malloc(strSize);
+    if (str != NULL) {
+        *str = 0;
+        // pass 2: construct string
+        for (int i = 0; i < numFlags; i++) {
+            if (flags & sm_TicketFlags[i].m_flag) {
+                if (str[0])
+                    _tcscat_s(str, strSize, _T(", "));
+                _tcscat_s(str, strSize, sm_TicketFlags[i].m_description);
+            }
+        }
+    }
+    *outStr = str;
+}
+
 
 static HFONT CreateBoldFont(HFONT font)
 {
@@ -1053,6 +1094,7 @@ void CLeashView::AddDisplayItem(CListCtrl &list,
 {
     TCHAR* localTimeStr=NULL;
     TCHAR* durationStr=NULL;
+    TCHAR* flagsStr=NULL;
     TCHAR tempStr[MAX_DURATION_STR+1];
     time_t now = LeashTime();
 
@@ -1104,8 +1146,11 @@ void CLeashView::AddDisplayItem(CListCtrl &list,
         list.SetItemText(iItem, iSubItem++, encTypes);
     }
     if (sm_viewColumns[TICKET_FLAGS].m_enabled) {
-        list.SetItemText(iItem, iSubItem++, "ticket flags here");
+        krb5TicketFlagsToString(flags, &flagsStr);
+        list.SetItemText(iItem, iSubItem++, flagsStr);
     }
+    if (flagsStr)
+        free(flagsStr);
     if (localTimeStr)
         free(localTimeStr);
     if (durationStr)