int LoadDisplayResources( struct display *d ) { int i, ret; char **ent; if (Setjmp( cnftalk.errjmp )) return -1; /* may memleak */ if ((ret = startConfig( GC_gDisplay, &d->cfg.dep, FALSE )) <= 0) return ret; GSendStr( d->name ); GSendStr( d->class2 ); LoadResources( &d->cfg ); /* Debug( "display(%s, %s) resources: %[*x\n", d->name, d->class2, d->cfg.numCfgEnt, ((char **)d->cfg.data) + d->cfg.numCfgEnt );*/ ret = 1; for (i = 0; i < as(dpyVal); i++) { if (!(ent = FindCfgEnt( d, dpyVal[i].id ))) ret = -1; else ApplyResource( dpyVal[i].id, ent, (char **)(((char *)d) + dpyVal[i].off) ); } if (ret < 0) LogError( "Internal error: config reader supplied incomplete data\n" ); return ret; }
void KCheckPass::handleVerify() { int ret; char *arr; if (GRecvInt( &ret )) { switch (ret) { case ConvGetBinary: if (!GRecvArr( &arr )) break; // FIXME: not supported cantCheck(); if (arr) ::free( arr ); return; case ConvGetNormal: if (!GRecvArr( &arr )) break; GSendStr(m_password.toUtf8().constData()); if (!m_password.isEmpty()) { // IsSecret GSendInt(1); } if (arr) ::free( arr ); return; case ConvGetHidden: if (!GRecvArr( &arr )) break; GSendStr(m_password.toUtf8().constData()); if (!m_password.isEmpty()) { // IsSecret GSendInt(1); } if (arr) ::free( arr ); return; case ConvPutInfo: if (!GRecvArr( &arr )) break; emit message(QString::fromLocal8Bit(arr)); ::free( arr ); return; case ConvPutError: if (!GRecvArr( &arr )) break; emit error(QString::fromLocal8Bit(arr)); ::free( arr ); return; } } reapVerify(); }
void ChooserDlg::addHostname() { if (!iline->text().isEmpty()) { GSendInt( G_Ch_RegisterHost ); GSendStr( iline->text().latin1() ); iline->clear(); } }
static void doShutdown( int type, const char *os ) { GSet( 1 ); GSendInt( G_Shutdown ); GSendInt( type ); GSendInt( 0 ); GSendInt( 0 ); GSendInt( SHUT_FORCE ); GSendInt( 0 ); /* irrelevant, will timeout immediately anyway */ GSendStr( os ); GSet( 0 ); }
int startConfig( int what, CfgDep *dep, int force ) { int ret; if ((ret = needsReScan( what, dep )) < 0 || (!ret && !force)) return ret; OpenGetter(); GSendInt( GC_GetConf ); GSendInt( what ); GSendStr( dep->name->str ); return 1; }
void TDMShutdown::accepted() { GSet( 1 ); GSendInt( G_Shutdown ); GSendInt( restart_rb->isChecked() ? SHUT_REBOOT : SHUT_HALT ); GSendInt( sch_st ); GSendInt( sch_to ); GSendInt( cb_force->isChecked() ? SHUT_FORCE : SHUT_CANCEL ); GSendInt( _allowShutdown == SHUT_ROOT ? 0 : -2 ); GSendStr( (restart_rb->isChecked() && targets && targets->currentItem() != oldTarget) ? targets->currentText().local8Bit().data() : 0 ); GSet( 0 ); inherited::accepted(); }
void ChooserDlg::accept() { if (focusWidget() == iline) { if (!iline->text().isEmpty()) { GSendInt( G_Ch_DirectChoice ); GSendStr( iline->text().latin1() ); iline->clear(); } return; } else /*if (focusWidget() == host_view)*/ { QListViewItem *item = host_view->currentItem(); if (item) { GSendInt( G_Ready ); GSendInt( ((ChooserListViewItem *)item)->id ); ::exit( EX_NORMAL ); } } }
void Greeter::gplugReturnText( const char *text, int tag ) { GSendStr( text ); if (text) GSendInt( tag ); }
int main( int argc ATTR_UNUSED, char **argv ) { DSpec dspec; ValArr va; char *ci, *disp, *dcls, *cfgfile; int what; if (!(ci = getenv( "CONINFO" ))) { fprintf( stderr, "This program is part of kdm and should not be run manually.\n" ); return 1; } if (sscanf( ci, "%d %d", &rfd, &wfd ) != 2) return 1; InitLog(); if ((debugLevel = GRecvInt()) & DEBUG_WCONFIG) sleep( 100 ); /* Debug ("parsing command line\n");*/ if (**++argv) kdmrc = *argv; /* while (*++argv) { } */ for (;;) { /* Debug ("Awaiting command ...\n");*/ if (!GRecvCmd( &what )) break; switch (what) { case GC_Files: /* Debug ("GC_Files\n");*/ ReadConf(); CopyValues( 0, &secGeneral, 0, C_CONFIG ); #ifdef XDMCP CopyValues( 0, &secXdmcp, 0, C_CONFIG ); GSendInt( 2 ); #else GSendInt( 1 ); #endif GSendStr( kdmrc ); GSendInt( -1 ); #ifdef XDMCP GSendNStr( VXaccess.ptr, VXaccess.len - 1 ); GSendInt( 0 ); #endif for (; (what = GRecvInt()) != -1; ) switch (what) { case GC_gGlobal: case GC_gDisplay: GSendInt( 0 ); break; #ifdef XDMCP case GC_gXaccess: GSendInt( 1 ); break; #endif default: GSendInt( -1 ); break; } break; case GC_GetConf: /* Debug( "GC_GetConf\n" );*/ memset( &va, 0, sizeof(va) ); what = GRecvInt(); cfgfile = GRecvStr(); switch (what) { case GC_gGlobal: /* Debug( "GC_gGlobal\n" );*/ Debug( "getting global config\n" ); ReadConf(); CopyValues( &va, &secGeneral, 0, 0 ); #ifdef XDMCP CopyValues( &va, &secXdmcp, 0, 0 ); #endif CopyValues( &va, &secShutdown, 0, 0 ); SendValues( &va ); break; case GC_gDisplay: /* Debug( "GC_gDisplay\n" );*/ disp = GRecvStr(); /* Debug( " Display %s\n", disp );*/ dcls = GRecvStr(); /* Debug( " Class %s\n", dcls );*/ Debug( "getting config for display %s, class %s\n", disp, dcls ); MkDSpec( &dspec, disp, dcls ? dcls : "" ); ReadConf(); CopyValues( &va, &sec_Core, &dspec, 0 ); CopyValues( &va, &sec_Greeter, &dspec, 0 ); free( disp ); if (dcls) free( dcls ); SendValues( &va ); break; #ifdef XDMCP case GC_gXaccess: ReadAccessFile( cfgfile ); break; #endif default: Debug( "Unsupported config category %#x\n", what ); } free( cfgfile ); break; default: Debug( "Unknown config command %#x\n", what ); } } /* Debug( "Config reader exiting ..." );*/ return EX_NORMAL; }
static void ReadAccessFile( const char *fname ) { HostEntry *hostList, **hostPtr = &hostList; AliasEntry *aliasList, **aliasPtr = &aliasList; AclEntry *acList, **acPtr = &acList, *acl; ListenEntry *listenList, **listenPtr = &listenList; char *displayOrAlias, *hostOrAlias; File file; int nHosts, nAliases, nAcls, nListens, nChars, error, bad; int i, len; nHosts = nAliases = nAcls = nListens = nChars = error = 0; if (!readFile( &file, fname, "XDMCP access control" )) goto sendacl; while ((displayOrAlias = ReadWord( &file, &len, FALSE ))) { if (*displayOrAlias == ALIAS_CHARACTER) { if (!(*aliasPtr = (AliasEntry *)Malloc( sizeof(AliasEntry)))) { error = 1; break; } (*aliasPtr)->name = displayOrAlias + 1; nChars += len; (*aliasPtr)->hosts = nHosts; (*aliasPtr)->pHosts = hostPtr; (*aliasPtr)->nhosts = 0; (*aliasPtr)->hasBad = 0; while ((hostOrAlias = ReadWord( &file, &len, TRUE ))) { if (ParseHost( &nHosts, &hostPtr, &nChars, hostOrAlias, len, PARSE_NO_BCAST )) (*aliasPtr)->nhosts++; else (*aliasPtr)->hasBad = 1; } aliasPtr = &(*aliasPtr)->next; nAliases++; } else if (!strcmp( displayOrAlias, LISTEN_STRING )) { if (!(*listenPtr = (ListenEntry *)Malloc( sizeof(ListenEntry)))) { error = 1; break; } (*listenPtr)->iface = nHosts; if (!(hostOrAlias = ReadWord( &file, &len, TRUE )) || !strcmp( hostOrAlias, WILDCARD_STRING ) || !ParseHost( &nHosts, &hostPtr, &nChars, hostOrAlias, len, PARSE_NO_BCAST|PARSE_NO_PAT|PARSE_NO_ALIAS )) { (*listenPtr)->iface = -1; } (*listenPtr)->mcasts = nHosts; (*listenPtr)->nmcasts = 0; while ((hostOrAlias = ReadWord( &file, &len, TRUE ))) { if (ParseHost( &nHosts, &hostPtr, &nChars, hostOrAlias, len, PARSE_NO_BCAST|PARSE_NO_PAT|PARSE_NO_ALIAS )) (*listenPtr)->nmcasts++; } listenPtr = &(*listenPtr)->next; nListens++; } else { if (!(*acPtr = (AclEntry *)Malloc( sizeof(AclEntry)))) { error = 1; break; } (*acPtr)->flags = 0; if (*displayOrAlias == NEGATE_CHARACTER) { (*acPtr)->flags |= a_notAllowed; displayOrAlias++; } else if (*displayOrAlias == EQUAL_CHARACTER) displayOrAlias++; (*acPtr)->entries = nHosts; (*acPtr)->pEntries = hostPtr; (*acPtr)->nentries = 1; if (!ParseHost( &nHosts, &hostPtr, &nChars, displayOrAlias, len, PARSE_NO_BCAST )) { bad = 1; if ((*acPtr)->flags & a_notAllowed) { LogError( "XDMCP ACL: unresolved host in denying rule\n" ); error = 1; } } else bad = 0; (*acPtr)->hosts = nHosts; (*acPtr)->pHosts = hostPtr; (*acPtr)->nhosts = 0; while ((hostOrAlias = ReadWord( &file, &len, TRUE ))) { if (!strcmp( hostOrAlias, CHOOSER_STRING )) (*acPtr)->flags |= a_useChooser; else if (!strcmp( hostOrAlias, NOBROADCAST_STRING )) (*acPtr)->flags |= a_notBroadcast; else { if (ParseHost( &nHosts, &hostPtr, &nChars, hostOrAlias, len, PARSE_NO_PAT )) (*acPtr)->nhosts++; } } if (!bad) { acPtr = &(*acPtr)->next; nAcls++; } } } if (!nListens) { if (!(*listenPtr = (ListenEntry *)Malloc( sizeof(ListenEntry)))) error = 1; else { (*listenPtr)->iface = -1; (*listenPtr)->mcasts = nHosts; (*listenPtr)->nmcasts = 0; #if defined(IPv6) && defined(AF_INET6) && defined(XDM_DEFAULT_MCAST_ADDR6) if (ParseHost( &nHosts, &hostPtr, &nChars, XDM_DEFAULT_MCAST_ADDR6, sizeof(XDM_DEFAULT_MCAST_ADDR6)-1, PARSE_ALL )) (*listenPtr)->nmcasts++; #endif nListens++; } } for (acl = acList, i = 0; i < nAcls; i++, acl = acl->next) if (checkHostlist( acl->pEntries, acl->nentries, aliasList, nAliases, 0, (acl->flags & a_notAllowed) ? CHECK_NOT : 0 ) || checkHostlist( acl->pHosts, acl->nhosts, aliasList, nAliases, 0, CHECK_NO_PAT )) error = 1; if (error) { nHosts = nAliases = nAcls = nListens = nChars = 0; sendacl: LogError( "No XDMCP requests will be granted\n" ); } GSendInt( nHosts ); GSendInt( nListens ); GSendInt( nAliases ); GSendInt( nAcls ); GSendInt( nChars ); for (i = 0; i < nHosts; i++, hostList = hostList->next) { GSendInt( hostList->type ); switch (hostList->type) { case HOST_ALIAS: GSendStr( hostList->entry.aliasPattern ); break; case HOST_PATTERN: GSendStr( hostList->entry.hostPattern ); break; case HOST_ADDRESS: GSendArr( hostList->entry.displayAddress.hostAddrLen, hostList->entry.displayAddress.hostAddress ); GSendInt( hostList->entry.displayAddress.connectionType ); break; } } for (i = 0; i < nListens; i++, listenList = listenList->next) { GSendInt( listenList->iface ); GSendInt( listenList->mcasts ); GSendInt( listenList->nmcasts ); } for (i = 0; i < nAliases; i++, aliasList = aliasList->next) { GSendStr( aliasList->name ); GSendInt( aliasList->hosts ); GSendInt( aliasList->nhosts ); } for (i = 0; i < nAcls; i++, acList = acList->next) { GSendInt( acList->entries ); GSendInt( acList->nentries ); GSendInt( acList->hosts ); GSendInt( acList->nhosts ); GSendInt( acList->flags ); } }