📄 ckcnet.c
字号:
#endif /* SO_RCVBUF */#ifdef SO_KEEPALIVEint tcp_keepalive = 1;#endif /* SO_KEEPALIVE */#endif /* SOL_SOCKET */#endif /* NOTCPOPTS */#ifndef NETCONN/* Network support not defined. Dummy functions here in case #ifdef's forgotten elsewhere.*/int /* Open network connection */netopen(name, lcl, nett) char *name; int *lcl, nett; { return(-1);}int /* Close network connection */netclos() { return(-1);}int /* Check network input buffer */nettchk() { return(-1);}int /* Flush network input buffer */netflui() { return(-1);}int /* Send network BREAK */netbreak() { return(-1);}int /* Input character from network */netinc(timo) int timo; { return(-1);}int /* Output character to network */#ifdef CK_ANSICnettoc(CHAR c)#elsenettoc(c) CHAR c;#endif /* CK_ANSIC *//* nettoc */ { return(-1);}intnettol(s,n) CHAR *s; int n; { return(-1);}#else /* NETCONN is defined (much of this module...) */#ifdef NETLEBUFVOIDle_init() { /* LocalEchoInit() */ int i; for (i = 0; i < LEBUFSIZ; i++) le_buf[i] = '\0'; le_start = 0; le_end = 0; le_data = 0; tt_push_inited = 1;}VOIDle_clean() { /* LocalEchoCleanup() */ le_init(); return;}intle_inbuf() { int rc = 0; if (le_start != le_end) { rc = (le_end - le_start + LEBUFSIZ) % LEBUFSIZ; } return(rc);}int#ifdef CK_ANSICle_putchar(CHAR ch)#elsele_putchar(ch) CHAR ch;#endif /* CK_ANSIC *//* le_putchar */ { if ((le_start - le_end + LEBUFSIZ)%LEBUFSIZ == 1) { debug(F110,"le_putchar","buffer is full",0); return(-1); } le_buf[le_end++] = ch; if (le_end == LEBUFSIZ) le_end = 0; le_data = 1; return(0);}int#ifdef CK_ANSICle_puts(CHAR * s, int n)#elsele_puts(s,n) CHAR * s; int n;#endif /* CK_ANSIC *//* le_puts */ { int rc = 0; int i = 0; CHAR * p = (CHAR *)"le_puts"; hexdump(p,s,n); for (i = 0; i < n; i++) rc = le_putchar((char)s[i]); debug(F101,"le_puts","",rc); return(rc);}int#ifdef CK_ANSICle_putstr(CHAR * s)#elsele_putstr(s) CHAR * s;#endif /* CK_ANSIC *//* le_puts */ { CHAR * p; int rc = 0; p = (CHAR *)"le_putstr"; hexdump(p,s,(int)strlen((char *)s)); for (p = s; *p && !rc; p++) rc = le_putchar(*p); return(rc);}int#ifdef CK_ANSICle_getchar(CHAR * pch)#else /* CK_ANSIC */le_getchar(pch) CHAR * pch;#endif /* CK_ANSIC *//* le_gatchar */ { int rc = 0; if (le_start != le_end) { *pch = le_buf[le_start]; le_buf[le_start] = 0; le_start++; if (le_start == LEBUFSIZ) le_start = 0; if (le_start == le_end) { le_data = 0; } rc++; } else { *pch = 0; } return(rc);}#endif /* NETLEBUF */#ifdef VMS/* In edit 190, we moved tn_ini() to be called from within netopen(). But tn_ini() calls ttol(), and ttol() checks to see if it's a net connection, but the flag for that isn't set until after netopen() is finished. Since, in this module, we are always doing network output anyway, we just call nettol() directly, instead of going thru ttol(). Only needed for VMS, since UNIX, AOS/VS, and VOS can handle net connections just like regular connections in ttol(), and OS/2 has a special routine for this.*/#define ttol nettol#endif /* VMS */int tcpsrfd = -1;#ifdef CK_KERBEROSchar * krb5_d_principal = NULL; /* Default principal */char * krb5_d_instance = NULL; /* Default instance */char * krb5_d_realm = NULL; /* Default realm */char * krb5_d_cc = NULL; /* Default credentials cache */char * krb5_d_srv = NULL; /* Default Service */int krb5_d_lifetime = 600; /* Default lifetime (10 hours) */int krb5_d_forwardable = 0; /* creds not forwardable */int krb5_d_proxiable = 0; /* creds not proxiable */int krb5_d_renewable = 0; /* creds not renewable (0 min) */int krb5_autoget = 1; /* Autoget TGTs */int krb5_autodel = 0; /* Auto delete TGTs */int krb5_d_getk4 = 0; /* K5 Kinit gets K4 TGTs */int krb5_checkaddrs = 1; /* Check TGT Addrs */int krb5_errno = 0; /* Last K5 errno */char * krb5_errmsg = NULL; /* Last K5 errmsg */char * krb4_d_principal = NULL; /* Default principal */char * krb4_d_realm = NULL; /* Default realm */char * krb4_d_srv = NULL; /* Default Service */int krb4_d_lifetime = 600; /* Default lifetime (10 hours) */int krb4_d_preauth = 1; /* Use preauth requests */char * krb4_d_instance = NULL; /* Default instance */int krb4_autoget = 1; /* Autoget TGTs */int krb4_autodel = 0; /* Auto delete TGTs */int krb4_checkaddrs = 1; /* Check TGT Addrs */int krb4_errno = 0; /* Last K4 errno */char * krb4_errmsg = NULL; /* Last K4 errmsg */struct krb_op_data krb_op = { /* Operational data structure */ 0, NULL /* (version, cachefile) */};struct krb4_init_data krb4_init = { /* Kerberos 4 INIT data structure */ 0, NULL, NULL, NULL, NULL};struct krb5_init_data krb5_init = { /* Kerberos 5 INIT data structure */ 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }};struct krb5_list_cred_data krb5_lc = { /* List Credentials data structure */ 0, 0, 0};int krb_action = -1; /* Kerberos action to perform */#ifndef CK_AUTHENTICATIONchar *ck_krb4_getrealm() { return("");}char *ck_krb5_getrealm(cc) char * cc; { return("");}char *ck_krb4_getprincipal() { return("");}char *ck_krb5_getprincipal(cc) char * cc; { return("");}#endif /* CK_AUTHENTICATION *//* I N I _ K E R B -- Initialize Kerberos data */VOIDini_kerb() { int i; krb_action = -1; /* No action specified */ krb_op.version = 0; /* Kerberos version (none) */ krb_op.cache = NULL; /* Cache file (none) *//* Kerberos 5 */ krb5_init.forwardable = krb5_d_forwardable; /* Init switch values... */ krb5_init.proxiable = krb5_d_proxiable; krb5_init.lifetime = krb5_d_lifetime; krb5_init.renew = 0; krb5_init.renewable = krb5_d_renewable; krb5_init.validate = 0; if (krb5_init.postdate) { free(krb5_init.postdate); krb5_init.postdate = NULL; } if (krb5_init.service) { free(krb5_init.service); krb5_init.service = NULL; } if (!krb5_d_cc || !krb5_d_cc[0]) { /* Set default cache */ char * p; p = ck_krb5_get_cc_name(); makestr(&krb5_d_cc,p); } if (!krb5_d_realm || !krb5_d_realm[0]) { /* Set default realm */ char * p; p = ck_krb5_getrealm(krb5_d_cc); makestr(&krb5_d_realm,p); } makestr(&krb5_init.instance,krb5_d_instance); makestr(&krb5_init.realm,krb5_d_realm); /* Set realm from default */ if (krb5_init.password) { memset(krb5_init.password,0xFF,strlen(krb5_init.password)); free(krb5_init.password); krb5_init.password = NULL; } if (!krb5_d_principal) { /* Default principal */ /* a Null principal indicates the user should be prompted */ char * p = ck_krb5_getprincipal(krb5_d_cc); if (!p || !(*p)) p = (char *)uidbuf; /* Principal = user */ makestr(&(krb5_d_principal),p); } makestr(&(krb5_init.principal),krb5_d_principal); for (i = 0; i <= KRB5_NUM_OF_ADDRS; i++) { if (krb5_init.addrs[i]) free(krb5_init.addrs[i]); krb5_init.addrs[i] = NULL; }/* Kerberos 4 */ krb4_init.lifetime = krb4_d_lifetime; krb4_init.preauth = krb4_d_preauth; makestr(&krb4_init.instance,krb4_d_instance); if (!krb4_d_realm || !krb4_d_realm[0]) {/* Set default realm */ char * p; p = ck_krb4_getrealm(); makestr(&krb4_d_realm,p); } makestr(&krb4_init.realm,krb4_d_realm); if (krb4_init.password) { memset(krb4_init.password,0xFF,strlen(krb4_init.password)); free(krb4_init.password); krb4_init.password = NULL; } if (!krb4_d_principal) { /* Default principal */ /* a Null principal indicates the user should be prompted */ char * p = ck_krb4_getprincipal(); if (!p || !(*p)) p = (char *)uidbuf; /* Principal = user */ makestr(&(krb4_d_principal),p); } makestr(&(krb4_init.principal),krb4_d_principal);}/* D O A U T H -- AUTHENTICATE action routine */intdoauth(cx) int cx; { /* AUTHENTICATE action routine */ int rc = 0; /* Return code */#ifdef CK_AUTHENTICATION#ifdef OS2 if (!ck_auth_loaddll()) /* Load Kerberos DLL */ return(rc);#endif /* OS2 */ if (krb_op.version == 4) { /* Version = 4 */#ifdef COMMENT sho_auth(AUTHTYPE_KERBEROS_V4);#endif /* COMMENT */ if (!ck_krb4_is_installed()) { printf("?Kerberos 4 is not installed\n"); return(0); } switch (krb_action) { /* Perform V4 functions */ case KRB_A_IN: /* INIT */ rc |= !(ck_krb4_initTGT(&krb_op,&krb4_init) < 0); break; case KRB_A_DE: /* DESTROY */ rc |= !(ck_krb4_destroy(&krb_op) < 0); break; case KRB_A_LC: /* LIST-CREDENTIALS */ rc |= !(ck_krb4_list_creds(&krb_op) < 0); break; } } if (krb_op.version == 5) { /* V5 functions */#ifdef COMMENT sho_auth(AUTHTYPE_KERBEROS_V5);#endif /* COMMENT */ if (!ck_krb5_is_installed()) { printf("?Kerberos 5 is not installed\n"); return(0); } switch (krb_action) { case KRB_A_IN: /* INIT */ rc |= !(ck_krb5_initTGT(&krb_op,&krb5_init) < 0); if ( krb5_init.getk4 ) rc |= !(ck_krb4_initTGT(&krb_op,&krb4_init) < 0); break; case KRB_A_DE: /* DESTROY */ rc |= !(ck_krb5_destroy(&krb_op) < 0); break; case KRB_A_LC: /* LIST-CREDENTIALS */ if (krb_op.version == 0) printf("\n"); rc |= !(ck_krb5_list_creds(&krb_op,&krb5_lc) < 0); break; } }#else#ifndef NOICP#ifndef NOSHOW rc = sho_auth(0); /* Show all */#endif /* NOSHOW */#endif /* NOICP */#endif /* CK_AUTHENTICATION */ return(rc);}#endif /* CK_KERBEROS */#ifdef TCPSOCKET#ifndef OS2#ifndef NOLISTEN /* For incoming connections */#ifndef INADDR_ANY#define INADDR_ANY 0#endif /* INADDR_ANY */_PROTOTYP( int ttbufr, ( VOID ) );_PROTOTYP( int tcpsrv_open, (char *, int *, int, int ) );static unsigned short tcpsrv_port = 0;#endif /* NOLISTEN */#endif /* OS2 */static char svcbuf[80]; /* TCP service string */static int svcnum = 0; /* TCP port number */#endif /* TCPSOCKET *//* TCPIPLIB means use separate socket calls for i/o, while on UNIX the normal file system calls are used for TCP/IP sockets too. Means "DEC_TCPIP or MULTINET or WINTCP or OS2 or BEBOX" (see ckcnet.h),*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -