📄 sctmem.c
字号:
char *sca_get_SCT_config_fname(sct_id)int sct_id;{ unsigned int secsc_errno; char *homedir = ""; static char *config_file_name = ""; static int old_sctid = 0; char sct_id_ascii[MAXSCTID_LEN]; char *proc = "sca_get_SCT_config_fname"; secsc_errno = NOERR;#ifdef SECSCTEST fprintf(stderr, "SECSC-Function: %s\n", proc);#endif if ((old_sctid != sct_id) || (!(config_file_name)) || (strlen(config_file_name) == 0)) { if ((config_file_name) && (strlen(config_file_name) != 0)) free(config_file_name); /* * Compose configuration file name */ homedir = getenv("HOME"); if (!homedir) { aux_add_error(ESYSTEM, "Getenv failed for variable HOME.", CNULL, 0, proc); return (CNULL); } config_file_name = (char *) malloc(strlen(homedir) + strlen(SCA_SCT_CONFIG_name) + 16); if (!config_file_name) { aux_add_error(EMALLOC, "SCT configuration filename", CNULL, 0, proc); return (CNULL); } strcpy(config_file_name, homedir); if (strlen(homedir)) if (config_file_name[strlen(config_file_name) - 1] != '/') strcat(config_file_name, "/"); strcat(config_file_name, SCA_SCT_CONFIG_name); if (sca_int2ascii(&sct_id_ascii[0], sct_id)) { aux_add_error(ESYSTEM, "Cannot get ASCII representation of sct_id", CNULL, 0, proc); return (CNULL); } strcat(config_file_name, sct_id_ascii); old_sctid = sct_id; }#ifdef SECSCTEST fprintf(stderr, "Name of SC configuration file: %s\n", config_file_name);#endif return(aux_cpy_String(config_file_name));} /* sca_get_SCT_config_fname *//*--------------------------------------------------------------*//* *//* PROC SCT_config_changed *//* *//* DESCRIPTION *//* *//* Check whether SCT configuration data have been changed. *//* *//* Compare the values of "old_elem" with the values of *//* "new_elem". *//*****************?????????????????????????????????????????????????????????*************//* Achtung: Die alten bzw. neuen Werte von "ns" und "rsv" werden nicht verglichen, da sonst nach jedem Kommando zum SCT hin das SCT configuration file geschrieben wuerde. Es gibt keine Probleme damit, wenn ein neuer Prozess gestartet wird, da beim Einlesen der SCT configuration data, auch "COMinit()" aufgerufen wird. "COMinit()" setzt "p_elem->first" auf 0. Dies bewirkt beim naechsten Aufruf von "COMtrans()", dass "Resynch()" aufgerufen wird, wo "ns" (alias "ssv") und "rsv" initialisiert werden.*//* Achtung der session key wird noch nicht verglichen *//*****************?????????????????????????????????????????????????????????*************//* *//* *//* IN DESCRIPTION *//* old_elem Pointer to the old values. *//* new_elem Pointer to the new values. *//* *//* OUT *//* *//* *//* RETURN DESCRIPTION *//* TRUE SCT configuration data have been*//* changed. *//* FALSE SCT configuration data have not *//* been changed. *//* *//* CALLED FUNCTIONS DESCRIPTION *//* *//*--------------------------------------------------------------*/staticBoolean SCT_config_changed(old_elem, new_elem) struct s_help_portparam *old_elem; struct s_portparam *new_elem; { unsigned int secsc_errno; Boolean changed = FALSE; char *proc = "SCT_config_changed"; secsc_errno = NOERR;#ifdef SECSCTEST/* fprintf(stderr, "SECSC-Function: %s\n", proc); */#endif if (strcmp (old_elem->port_name, new_elem->port_name)) { changed = TRUE; goto ret_value; } if (old_elem->bwt != new_elem->bwt) { changed = TRUE; goto ret_value; } if (old_elem->cwt != new_elem->cwt) { changed = TRUE; goto ret_value; } if (old_elem->baud != new_elem->baud) { changed = TRUE; goto ret_value; } if (old_elem->databits != new_elem->databits) { changed = TRUE; goto ret_value; } if (old_elem->stopbits != new_elem->stopbits) { changed = TRUE; goto ret_value; } if (old_elem->parity != new_elem->parity) { changed = TRUE; goto ret_value; } if (old_elem->dataformat != new_elem->dataformat) { changed = TRUE; goto ret_value; } if (old_elem->tpdusize != new_elem->tpdusize) { changed = TRUE; goto ret_value; } if (old_elem->apdusize != new_elem->apdusize) { changed = TRUE; goto ret_value; } if (old_elem->edc != new_elem->edc) { changed = TRUE; goto ret_value; } if (old_elem->protocoltype != new_elem->protocoltype) { changed = TRUE; goto ret_value; } if (old_elem->chaining != new_elem->chaining) { changed = TRUE; goto ret_value; }/* if (old_elem->ns != new_elem->ns) { changed = TRUE; goto ret_value; } if (old_elem->rsv != new_elem->rsv) { changed = TRUE; goto ret_value; }*/ if (old_elem->sad != new_elem->sad) { changed = TRUE; goto ret_value; } if (old_elem->dad != new_elem->dad) { changed = TRUE; goto ret_value; } if (new_elem->schistory) { if (strcmp (old_elem->schistory, new_elem->schistory)) { changed = TRUE; goto ret_value; } } else { if (old_elem->schistory[0] != '\0') { changed = TRUE; goto ret_value; } } if (old_elem->port_id != new_elem->port_id) { changed = TRUE; goto ret_value; } if (old_elem->first != new_elem->first) { changed = TRUE; goto ret_value; } if (old_elem->ssc != new_elem->ssc) { changed = TRUE; goto ret_value; } if (old_elem->setmode != new_elem->setmode) { changed = TRUE; goto ret_value; } if (old_elem->sc_request != new_elem->sc_request) { changed = TRUE; goto ret_value; } if (old_elem->secure_messaging.command != new_elem->secure_messaging.command) { changed = TRUE; goto ret_value; } if (old_elem->secure_messaging.response != new_elem->secure_messaging.response) { changed = TRUE; goto ret_value; }/*********?????????????????????????????????????*********//* Folgendes sollte auch verglichen werden??????????????** old_elem->session_key.subjectAI = new_elem->session_key.subjectAI; old_elem->session_key.subjectkey.bits = new_elem->session_key.subjectkey.bits; old_elem->session_key.subjectkey.nbits = new_elem->session_key.subjectkey.nbits;************???????????????????????????????????******/ret_value:#ifdef SECSCTEST if (changed == TRUE) fprintf(stderr, "SECSC-Function: %s\n", proc);#endif return(changed);} /* end SCT_config_changed *//*--------------------------------------------------------------*//* *//* PROC sca_int2ascii *//* *//* DESCRIPTION *//* *//* Transform an integer value into a NULL terminated ASCII *//* character string. *//* *//* IN DESCRIPTION *//* s Pointer to char_string. *//* n Integer value to be transformed. *//* *//* OUT *//* char_string Character string. *//* *//* *//* RETURN DESCRIPTION *//* 0 o.k *//* -1 Error *//* *//* CALLED FUNCTIONS DESCRIPTION *//* *//*--------------------------------------------------------------*/staticint sca_int2ascii(s,n) /* from integer to NULL terminated ascii string */char s[];int n;{ int c,i,j, sign; char *proc = "sca_int2ascii";#ifdef SECSCTEST/* fprintf(stderr, "SECSC-Function: %s\n", proc);*/#endif if (!(s)) { aux_add_error(EINVALID, "invalid input value", CNULL, 0, proc); return (-1); } if((sign = n) < 0) n = -n; i = 0; do { /* generation from right to left */ s[i++] = n % 10 + '0'; } while ((n /= 10) > 0); s[i] = '\0'; /* reverse(s);*/ for (i=0, j=strlen(s)-1; i<j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; } /* end for */#ifdef SECSCTEST/* fprintf(stderr, "char_string: %s\n", s);*/#endif return(0);} /* end sca_int2ascii */#endif /* PROCDAT *//*--------------------------------------------------------*//* | GMD *//* +-----*//* PROC get_orgelem() VERSION 2.0 *//* DATE November 1991 *//* BY L.Eckstein,GMD *//* *//* DESCRIPTION *//* Read original SCT-Element out of Install-File. *//* In the environment must exists the shell-variable *//* "STAMOD". *//* This shell-variable contains the name of the *//* installation - File *//* *//* *//* IN DESCRIPTION *//* Pointer Pointer of old listelement *//* *//* *//* OUT *//* *//* *//* *//* *//* RETURN DESCRIPTION *//* 0 o.k. *//* -1 error *//* ESIDUNK *//* ENOSHELL *//* EOPERR *//* EEMPTY *//* ERDERR *//* ECLERR *//*--------------------------------------------------------*/intget_orgelem(sct_id, oldelem) int sct_id; struct s_portparam *oldelem;{ /*----------------------------------------------------------*/ /* Definitions */ /*----------------------------------------------------------*/ char *fileptr; FILE *fd; struct s_record genrecord; int rc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -