summaryrefslogtreecommitdiffstats
path: root/src/windows/cns/tktlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows/cns/tktlist.c')
-rw-r--r--src/windows/cns/tktlist.c716
1 files changed, 346 insertions, 370 deletions
diff --git a/src/windows/cns/tktlist.c b/src/windows/cns/tktlist.c
index 8e5db53958..79d9483de6 100644
--- a/src/windows/cns/tktlist.c
+++ b/src/windows/cns/tktlist.c
@@ -10,10 +10,12 @@
*/
#if !defined(KRB5) && !defined(KRB4)
- #define KRB5 1
+#define KRB5 1
#endif
#include <windows.h>
+#include <windowsx.h>
+
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
@@ -21,24 +23,23 @@
#include <time.h>
#ifdef KRB4
- #include "mit-copyright.h"
- #include "kerberos.h"
+#include "mit-copyright.h"
+#include "kerberos.h"
#endif
#ifdef KRB5
- #include "winsock.h"
- #include "krb5.h"
- #include "com_err.h"
-
- #define DEFAULT_TKT_LIFE 120
- #define ANAME_SZ 40
- #define REALM_SZ 40
- #define SNAME_SZ 40
- #define INST_SZ 40
- #define MAX_KPW_LEN 128
- /* include space for '.' and '@' */
- #define MAX_K_NAME_SZ (ANAME_SZ + INST_SZ + REALM_SZ + 2)
- #define ORGANIZATION "Cygnus Support"
+#include "winsock.h"
+#include "krb5.h"
+#include "com_err.h"
+
+#define DEFAULT_TKT_LIFE 120
+#define ANAME_SZ 40
+#define REALM_SZ 40
+#define SNAME_SZ 40
+#define INST_SZ 40
+#define MAX_KPW_LEN 128
+/* include space for '.' and '@' */
+#define MAX_K_NAME_SZ (ANAME_SZ + INST_SZ + REALM_SZ + 2)
#endif
#include "cns.h"
@@ -48,13 +49,13 @@
* Ticket information for a list line
*/
typedef struct {
- BOOL ticket; /* TRUE if this is a real ticket */
- time_t issue_time; /* time_t of issue */
- long lifetime; /* Lifetime for ticket in 5 minute intervals */
- char buf[0]; /* String to display */
+ BOOL ticket; /* TRUE if this is a real ticket */
+ time_t issue_time; /* time_t of issue */
+ long lifetime; /* Lifetime for ticket in 5 minute intervals */
+ char buf[0]; /* String to display */
} TICKETINFO, *LPTICKETINFO;
-/*+
+/*
* Function: Returns a standard ctime date with day of week and year
* removed.
*
@@ -64,22 +65,22 @@ typedef struct {
* Returns: A pointer to the adjusted time value.
*/
static char *
-short_date (long t) {
- static char buf[26 - 4];
- char *p;
-
- p = ctime(&t);
- assert(p != NULL);
+short_date (long t)
+{
+ static char buf[26 - 4];
+ char *p;
- strcpy (buf, p + 4);
- buf[12] = '\0';
+ p = ctime(&t);
+ assert(p != NULL);
- return buf;
+ strcpy (buf, p + 4);
+ buf[12] = '\0';
-} /* short_date */
+ return buf;
+}
-/*++
+/*+
* Function: Initializes and populates the ticket list with all existing
* Kerberos tickets.
*
@@ -89,170 +90,165 @@ short_date (long t) {
* Returns: Number of elements in the list or -1 on error
*/
int
-ticket_init_list (
- HWND hwnd)
+ticket_init_list (HWND hwnd)
{
- int ncred;
- LRESULT rc;
- int l;
- LPTICKETINFO lpinfo;
- char buf[26+2 + 26+2 + ANAME_SZ+1 + INST_SZ+1 + REALM_SZ + 22];
- #ifdef KRB4
- int i;
- time_t expiration;
- char service[ANAME_SZ];
- char instance[INST_SZ];
- char realm[REALM_SZ];
- CREDENTIALS c;
- #endif
- #ifdef KRB5
- krb5_cc_cursor cursor;
- krb5_error_code code;
- krb5_creds c;
- krb5_flags flags;
- char *sname; /* Name of the service */
- char *flags_string(krb5_creds *cred);
- #endif
-
- SendMessage(hwnd, WM_SETREDRAW, FALSE, 0);
-
- rc = SendMessage(hwnd, LB_GETCOUNT, 0, 0);
- assert(rc != LB_ERR);
-
- if (rc > 0)
- ticket_destroy(hwnd);
-
- while (--rc >= 0)
- SendMessage(hwnd, LB_DELETESTRING, (WPARAM) rc, 0);
-
- #ifdef KRB4
-
- ncred = krb_get_num_cred();
- for (i = 1; i <= ncred; i++) {
- krb_get_nth_cred(service, instance, realm, i);
- krb_get_cred(service, instance, realm, &c);
- strcpy(buf, " ");
- strcat(buf, short_date(c.issue_date - kwin_get_epoch()));
- expiration = c.issue_date - kwin_get_epoch() + (long) c.lifetime * 5L * 60L;
- strcat (buf, " ");
- strcat(buf, short_date(expiration));
- strcat (buf, " ");
- l = strlen(buf);
- sprintf(&buf[l], "%s%s%s%s%s (%d)",
- c.service, (c.instance[0] ? "." : ""), c.instance,
- (c.realm[0] ? "@" : ""), c.realm, c.kvno);
- l = strlen(buf);
-
- lpinfo = (LPTICKETINFO) malloc(sizeof(TICKETINFO) + l + 1);
- assert(lpinfo != NULL);
-
- if (lpinfo == NULL)
- return -1;
-
- lpinfo->ticket = TRUE;
- lpinfo->issue_time = c.issue_date - kwin_get_epoch(); /* back to system time */
- lpinfo->lifetime = (long) c.lifetime * 5L * 60L;
- strcpy(lpinfo->buf, buf);
-
- rc = SendMessage(hwnd, LB_ADDSTRING, 0, (LPARAM) lpinfo);
- assert(rc >= 0);
-
- if (rc < 0)
- return -1;
- }
-
- #endif
-
- #ifdef KRB5
-
- ncred = 0;
- flags = 0;
- if (code = krb5_cc_set_flags(k5_context, k5_ccache, flags)) {
- if (code != KRB5_FCC_NOFILE) {
- return -1;
- }
- } else {
- if (code = krb5_cc_start_seq_get(k5_context, k5_ccache, &cursor)) {
- return -1;
- }
-
- while (1) {
- code = krb5_cc_next_cred(k5_context, k5_ccache, &cursor, &c);
- if (code != 0)
- break;
-
- ncred++;
- strcpy (buf, " ");
- strcat (buf, short_date (c.times.starttime - kwin_get_epoch()));
- strcat (buf, " ");
- strcat (buf, short_date (c.times.endtime - kwin_get_epoch()));
- strcat (buf, " ");
-
- /* Add ticket service name and realm */
- code = krb5_unparse_name (k5_context, c.server, &sname);
- if (code) {
- com_err (NULL, code, "while unparsing server name");
- break;
- }
- strcat (buf, sname);
- free (sname);
- strcat (buf, flags_string (&c)); /* Add flag info */
-
- l = strlen(buf);
- lpinfo = (LPTICKETINFO) malloc(sizeof(TICKETINFO) + l + 1);
- assert(lpinfo != NULL);
-
- if (lpinfo == NULL)
- return -1;
-
- lpinfo->ticket = TRUE;
- lpinfo->issue_time = c.times.starttime - kwin_get_epoch();
- lpinfo->lifetime = c.times.endtime - c.times.starttime;
- strcpy(lpinfo->buf, buf);
-
- rc = SendMessage(hwnd, LB_ADDSTRING, 0, (LPARAM) lpinfo);
- assert(rc >= 0);
-
- if (rc < 0)
- return -1;
- }
-
- if (code == KRB5_CC_END) { /* End of ccache */
- if (code = krb5_cc_end_seq_get(k5_context, k5_ccache, &cursor)) {
- return -1;
- }
- flags = KRB5_TC_OPENCLOSE; /* turns on OPENCLOSE mode */
- if (code = krb5_cc_set_flags(k5_context, k5_ccache, flags)) {
- return -1;
- }
- } else {
- return -1;
- }
- }
- #endif
-
- if (ncred <= 0) {
- strcpy(buf, " No Tickets");
- lpinfo = (LPTICKETINFO) malloc(sizeof(TICKETINFO) + strlen(buf) + 1);
- assert(lpinfo != NULL);
-
- if (lpinfo == NULL)
- return -1;
-
- lpinfo->ticket = FALSE;
- strcpy (lpinfo->buf, buf);
- rc = SendMessage(hwnd, LB_ADDSTRING, 0, (LPARAM) lpinfo);
- assert(rc >= 0);
- }
-
- SendMessage(hwnd, WM_SETREDRAW, TRUE, 0);
-
- return ncred;
-
-} /* ticket_init_list */
+ int ncred;
+ LRESULT rc;
+ int l;
+ LPTICKETINFO lpinfo;
+ char buf[26+2 + 26+2 + ANAME_SZ+1 + INST_SZ+1 + REALM_SZ + 22];
+#ifdef KRB4
+ int i;
+ time_t expiration;
+ char service[ANAME_SZ];
+ char instance[INST_SZ];
+ char realm[REALM_SZ];
+ CREDENTIALS c;
+#endif
+#ifdef KRB5
+ krb5_cc_cursor cursor;
+ krb5_error_code code;
+ krb5_creds c;
+ krb5_flags flags;
+ char *sname; /* Name of the service */
+ char *flags_string(krb5_creds *cred);
+#endif
+ SetWindowRedraw(hwnd, FALSE);
-/*+
+ rc = ListBox_GetCount(hwnd);
+ assert(rc != LB_ERR);
+
+ if (rc > 0)
+ ticket_destroy(hwnd);
+
+ while (--rc >= 0)
+ ListBox_DeleteString(hwnd, rc);
+
+#ifdef KRB4
+ ncred = krb_get_num_cred();
+ for (i = 1; i <= ncred; i++) {
+ krb_get_nth_cred(service, instance, realm, i);
+ krb_get_cred(service, instance, realm, &c);
+ strcpy(buf, " ");
+ strcat(buf, short_date(c.issue_date - kwin_get_epoch()));
+ expiration = c.issue_date - kwin_get_epoch() + (long) c.lifetime * 5L * 60L;
+ strcat (buf, " ");
+ strcat(buf, short_date(expiration));
+ strcat (buf, " ");
+ l = strlen(buf);
+ sprintf(&buf[l], "%s%s%s%s%s (%d)",
+ c.service, (c.instance[0] ? "." : ""), c.instance,
+ (c.realm[0] ? "@" : ""), c.realm, c.kvno);
+ l = strlen(buf);
+
+ lpinfo = (LPTICKETINFO) malloc(sizeof(TICKETINFO) + l + 1);
+ assert(lpinfo != NULL);
+
+ if (lpinfo == NULL)
+ return -1;
+
+ lpinfo->ticket = TRUE;
+ lpinfo->issue_time = c.issue_date - kwin_get_epoch(); /* back to system time */
+ lpinfo->lifetime = (long) c.lifetime * 5L * 60L;
+ strcpy(lpinfo->buf, buf);
+
+ rc = ListBox_AddItemData(hwnd, lpinfo);
+ assert(rc >= 0);
+
+ if (rc < 0)
+ return -1;
+ }
+
+#endif
+
+#ifdef KRB5
+
+ ncred = 0;
+ flags = 0;
+ if (code = krb5_cc_set_flags(k5_context, k5_ccache, flags)) {
+ if (code != KRB5_FCC_NOFILE) {
+ return -1;
+ }
+ } else {
+ if (code = krb5_cc_start_seq_get(k5_context, k5_ccache, &cursor)) {
+ return -1;
+ }
+ while (1) {
+ code = krb5_cc_next_cred(k5_context, k5_ccache, &cursor, &c);
+ if (code != 0)
+ break;
+
+ ncred++;
+ strcpy (buf, " ");
+ strcat (buf, short_date (c.times.starttime - kwin_get_epoch()));
+ strcat (buf, " ");
+ strcat (buf, short_date (c.times.endtime - kwin_get_epoch()));
+ strcat (buf, " ");
+
+ /* Add ticket service name and realm */
+ code = krb5_unparse_name (k5_context, c.server, &sname);
+ if (code) {
+ com_err (NULL, code, "while unparsing server name");
+ break;
+ }
+ strcat (buf, sname);
+
+ strcat (buf, flags_string (&c)); /* Add flag info */
+
+ l = strlen(buf);
+ lpinfo = (LPTICKETINFO) malloc(sizeof(TICKETINFO) + l + 1);
+ assert(lpinfo != NULL);
+
+ if (lpinfo == NULL)
+ return -1;
+
+ lpinfo->ticket = TRUE;
+ lpinfo->issue_time = c.times.starttime - kwin_get_epoch();
+ lpinfo->lifetime = c.times.endtime - c.times.starttime;
+ strcpy(lpinfo->buf, buf);
+
+ rc = ListBox_AddItemData(hwnd, lpinfo);
+ assert(rc >= 0);
+
+ if (rc < 0)
+ return -1;
+ }
+ if (code == KRB5_CC_END) { /* End of ccache */
+ if (code = krb5_cc_end_seq_get(k5_context, k5_ccache, &cursor)) {
+ return -1;
+ }
+ flags = KRB5_TC_OPENCLOSE; /* turns on OPENCLOSE mode */
+ if (code = krb5_cc_set_flags(k5_context, k5_ccache, flags)) {
+ return -1;
+ }
+ } else {
+ return -1;
+ }
+ }
+#endif
+
+ if (ncred <= 0) {
+ strcpy(buf, " No Tickets");
+ lpinfo = (LPTICKETINFO) malloc(sizeof(TICKETINFO) + strlen(buf) + 1);
+ assert(lpinfo != NULL);
+
+ if (lpinfo == NULL)
+ return -1;
+
+ lpinfo->ticket = FALSE;
+ strcpy (lpinfo->buf, buf);
+ rc = ListBox_AddItemData(hwnd, lpinfo);
+ assert(rc >= 0);
+ }
+
+ SetWindowRedraw(hwnd, TRUE);
+
+ return ncred;
+}
+
+
+/*
* Function: Destroy the ticket list. Make sure to delete all
* ticket entries created during ticket initialization.
*
@@ -261,171 +257,151 @@ ticket_init_list (
*/
void
ticket_destroy (
- HWND hwnd)
+ HWND hwnd)
{
- int i;
- int n;
- LRESULT rc;
+ int i;
+ int n;
+ LRESULT rc;
- n = (int) SendMessage(hwnd, LB_GETCOUNT, 0, 0);
+ n = ListBox_GetCount(hwnd);
- for (i = 0; i < n; i++) {
- rc = SendMessage(hwnd, LB_GETITEMDATA, i, 0);
- assert(rc != LB_ERR);
+ for (i = 0; i < n; i++) {
+ rc = ListBox_GetItemData(hwnd, i);
+ assert(rc != LB_ERR);
- if (rc != LB_ERR)
- free ((void *) rc);
- }
-
-} /* ticket_destroy */
+ if (rc != LB_ERR)
+ free ((void *) rc);
+ }
+}
-/*+
+/*
* Function: Respond to the WM_MEASUREITEM message for the ticket list
- * by setting each list item up at 1/4" hight.
- *
- * Parameters:
- * hwnd - the window handle of the ticket window.
- *
- * wparam - control id of the ticket list.
- *
- * lparam - pointer to the MEASUREITEMSTRUCT.
- *
- * Returns: TRUE if message process, FALSE otherwise.
+ * by setting each list item up at 1/4 inch hight.
*/
-LONG
-ticket_measureitem (
- HWND hwnd,
- WPARAM wparam,
- LPARAM lparam)
+void
+ticket_measureitem(HWND hwnd, MEASUREITEMSTRUCT *lpmi)
{
- int logpixelsy;
- LPMEASUREITEMSTRUCT lpmi;
- HDC hdc;
-
- lpmi = (LPMEASUREITEMSTRUCT) lparam;
- hdc = GetDC(HWND_DESKTOP);
- logpixelsy = GetDeviceCaps(hdc, LOGPIXELSY);
- ReleaseDC(HWND_DESKTOP, hdc);
- lpmi->itemHeight = logpixelsy / 4; /* 1/4 inch */
+ int logpixelsy;
+ HDC hdc;
- return TRUE;
+ if (lpmi->CtlID != IDD_TICKET_LIST)
+ return;
-} /* ticket_measureitem */
+ hdc = GetDC(HWND_DESKTOP);
+ logpixelsy = GetDeviceCaps(hdc, LOGPIXELSY);
+ ReleaseDC(HWND_DESKTOP, hdc);
+ lpmi->itemHeight = logpixelsy / 4; /* 1/4 inch */
+}
-/*+
+/*
* Function: Respond to the WM_DRAWITEM message for the ticket list
* by displaying a single list item.
- *
- * Parameters:
- * hwnd - the window handle of the ticket window.
- *
- * wparam - control id of the ticket list.
- *
- * lparam - pointer to the DRAWITEMSTRUCT.
- *
- * Returns: TRUE if message process, FALSE otherwise.
*/
-LONG ticket_drawitem(
- HWND hwnd,
- WPARAM wparam,
- LPARAM lparam)
+void
+ticket_drawitem(HWND hwnd, const DRAWITEMSTRUCT *lpdi)
{
- LPDRAWITEMSTRUCT lpdi;
- BOOL rc;
- COLORREF bkcolor;
- HBRUSH hbrush;
- UINT textheight;
- UINT alignment;
- int left, top;
- BOOL b;
- LPTICKETINFO lpinfo;
- HICON hicon;
- #if 0
- COLORREF textcolor;
- COLORREF orgbkcolor;
- COLORREF orgtextcolor;
- #endif
-
- lpdi = (LPDRAWITEMSTRUCT) lparam;
- lpinfo = (LPTICKETINFO) lpdi->itemData;
-
- if (lpdi->itemAction == ODA_FOCUS)
- return TRUE;
-
- #if 0
- if (lpdi->itemState & ODS_SELECTED) {
- textcolor = GetSysColor(COLOR_HIGHLIGHTTEXT);
- bkcolor = GetSysColor(COLOR_HIGHLIGHT);
-
- orgtextcolor = SetTextColor(lpdi->hDC, textcolor);
- assert(textcolor != 0x80000000);
-
- orgbkcolor = SetBkColor(lpdi->hDC, bkcolor);
- assert(bkcolor != 0x80000000);
- }
- else
- #endif
-
- bkcolor = GetBkColor(lpdi->hDC);
- hbrush = CreateSolidBrush(bkcolor);
- assert(hbrush != NULL);
-
- FillRect(lpdi->hDC, &(lpdi->rcItem), hbrush);
- DeleteObject(hbrush);
-
- /*
- * Display the appropriate icon
- */
- if (lpinfo->ticket) {
- hicon = kwin_get_icon(lpinfo->issue_time + lpinfo->lifetime);
- left = lpdi->rcItem.left - (32 - ICON_WIDTH) / 2;
- top = lpdi->rcItem.top;
- top += (lpdi->rcItem.bottom - lpdi->rcItem.top - 32) / 2;
-
- b = DrawIcon(lpdi->hDC, left, top, hicon);
- assert(b);
- }
-
- /*
- * Display centered string
- */
- textheight = HIWORD(GetTextExtent(lpdi->hDC, "X", 1));
- alignment = SetTextAlign(lpdi->hDC, TA_TOP | TA_LEFT);
-
- if (lpinfo->ticket)
- left = lpdi->rcItem.left + ICON_WIDTH;
- else
- left = lpdi->rcItem.left;
-
- top = lpdi->rcItem.top;
- top += (lpdi->rcItem.bottom - lpdi->rcItem.top - textheight) / 2;
- rc = TextOut(lpdi->hDC, left, top, (LPSTR) lpinfo->buf,
- strlen((LPSTR) lpinfo->buf));
- assert(rc);
-
- alignment = SetTextAlign(lpdi->hDC, alignment);
-
- #if 0
- if (lpdi->itemState & ODS_SELECTED) {
- textcolor = SetTextColor(lpdi->hDC, orgtextcolor);
- assert(textcolor != 0x80000000);
-
- bkcolor = SetBkColor(lpdi->hDC, orgbkcolor);
- assert(bkcolor != 0x80000000);
- }
-
- #endif
-
- return TRUE;
-
-} /* ticket_drawitem */
+ BOOL rc;
+ COLORREF bkcolor;
+ HBRUSH hbrush;
+ UINT textheight;
+ UINT alignment;
+ int left, top;
+ BOOL b;
+ LPTICKETINFO lpinfo;
+ HICON hicon;
+#if 0
+ COLORREF textcolor;
+ COLORREF orgbkcolor;
+ COLORREF orgtextcolor;
+#endif
+ SIZE Size;
+
+ if (lpdi->CtlID != IDD_TICKET_LIST)
+ return;
+
+ lpinfo = (LPTICKETINFO) lpdi->itemData;
+
+ if (lpdi->itemAction == ODA_FOCUS)
+ return;
+
+#if 0
+ if (lpdi->itemState & ODS_SELECTED) {
+ textcolor = GetSysColor(COLOR_HIGHLIGHTTEXT);
+ bkcolor = GetSysColor(COLOR_HIGHLIGHT);
+
+ orgtextcolor = SetTextColor(lpdi->hDC, textcolor);
+ assert(textcolor != 0x80000000);
+
+ orgbkcolor = SetBkColor(lpdi->hDC, bkcolor);
+ assert(bkcolor != 0x80000000);
+ }
+ else
+#endif
+
+ bkcolor = GetBkColor(lpdi->hDC);
+ hbrush = CreateSolidBrush(bkcolor);
+ assert(hbrush != NULL);
+
+ FillRect(lpdi->hDC, &(lpdi->rcItem), hbrush);
+ DeleteObject(hbrush);
+
+ /*
+ * Display the appropriate icon
+ */
+ if (lpinfo->ticket) {
+ hicon = kwin_get_icon(lpinfo->issue_time + lpinfo->lifetime);
+ left = lpdi->rcItem.left - (32 - ICON_WIDTH) / 2;
+ top = lpdi->rcItem.top;
+ top += (lpdi->rcItem.bottom - lpdi->rcItem.top - 32) / 2;
+
+ b = DrawIcon(lpdi->hDC, left, top, hicon);
+ assert(b);
+ }
+
+ /*
+ * Display centered string
+ */
+#ifdef _WIN32
+ GetTextExtentPoint32(lpdi->hDC, "X", 1, &Size);
+#else
+ GetTextExtentPoint(lpdi->hDC, "X", 1, &Size);
+#endif
+
+ textheight = Size.cy;
+
+ alignment = SetTextAlign(lpdi->hDC, TA_TOP | TA_LEFT);
+
+ if (lpinfo->ticket)
+ left = lpdi->rcItem.left + ICON_WIDTH;
+ else
+ left = lpdi->rcItem.left;
+
+ top = lpdi->rcItem.top;
+ top += (lpdi->rcItem.bottom - lpdi->rcItem.top - textheight) / 2;
+ rc = TextOut(lpdi->hDC, left, top, (LPSTR) lpinfo->buf,
+ strlen((LPSTR) lpinfo->buf));
+ assert(rc);
+
+ alignment = SetTextAlign(lpdi->hDC, alignment);
+
+#if 0
+ if (lpdi->itemState & ODS_SELECTED) {
+ textcolor = SetTextColor(lpdi->hDC, orgtextcolor);
+ assert(textcolor != 0x80000000);
+
+ bkcolor = SetBkColor(lpdi->hDC, orgbkcolor);
+ assert(bkcolor != 0x80000000);
+ }
+
+#endif
+}
#ifdef KRB5
-/*+
+/*
*
* Flags_string
*
@@ -434,39 +410,39 @@ LONG ticket_drawitem(
*/
char *
flags_string(krb5_creds *cred) {
- static char buf[32];
- int i = 0;
-
- buf[i++] = ' ';
- buf[i++] = '(';
- if (cred->ticket_flags & TKT_FLG_FORWARDABLE)
- buf[i++] = 'F';
- if (cred->ticket_flags & TKT_FLG_FORWARDED)
- buf[i++] = 'f';
- if (cred->ticket_flags & TKT_FLG_PROXIABLE)
- buf[i++] = 'P';
- if (cred->ticket_flags & TKT_FLG_PROXY)
- buf[i++] = 'p';
- if (cred->ticket_flags & TKT_FLG_MAY_POSTDATE)
- buf[i++] = 'D';
- if (cred->ticket_flags & TKT_FLG_POSTDATED)
- buf[i++] = 'd';
- if (cred->ticket_flags & TKT_FLG_INVALID)
- buf[i++] = 'i';
- if (cred->ticket_flags & TKT_FLG_RENEWABLE)
- buf[i++] = 'R';
- if (cred->ticket_flags & TKT_FLG_INITIAL)
- buf[i++] = 'I';
- if (cred->ticket_flags & TKT_FLG_HW_AUTH)
- buf[i++] = 'H';
- if (cred->ticket_flags & TKT_FLG_PRE_AUTH)
- buf[i++] = 'A';
-
- buf[i++] = ')';
- buf[i] = '\0';
- if (i <= 3)
- buf[0] = '\0';
- return(buf);
+ static char buf[32];
+ int i = 0;
+
+ buf[i++] = ' ';
+ buf[i++] = '(';
+ if (cred->ticket_flags & TKT_FLG_FORWARDABLE)
+ buf[i++] = 'F';
+ if (cred->ticket_flags & TKT_FLG_FORWARDED)
+ buf[i++] = 'f';
+ if (cred->ticket_flags & TKT_FLG_PROXIABLE)
+ buf[i++] = 'P';
+ if (cred->ticket_flags & TKT_FLG_PROXY)
+ buf[i++] = 'p';
+ if (cred->ticket_flags & TKT_FLG_MAY_POSTDATE)
+ buf[i++] = 'D';
+ if (cred->ticket_flags & TKT_FLG_POSTDATED)
+ buf[i++] = 'd';
+ if (cred->ticket_flags & TKT_FLG_INVALID)
+ buf[i++] = 'i';
+ if (cred->ticket_flags & TKT_FLG_RENEWABLE)
+ buf[i++] = 'R';
+ if (cred->ticket_flags & TKT_FLG_INITIAL)
+ buf[i++] = 'I';
+ if (cred->ticket_flags & TKT_FLG_HW_AUTH)
+ buf[i++] = 'H';
+ if (cred->ticket_flags & TKT_FLG_PRE_AUTH)
+ buf[i++] = 'A';
+
+ buf[i++] = ')';
+ buf[i] = '\0';
+ if (i <= 3)
+ buf[0] = '\0';
+ return(buf);
}
#endif /* KRB5 */