Document revision date: 28 June 1999
[Compaq] [Go to the documentation home page] [How to order documentation] [Help on this site] [How to contact us]
[OpenVMS documentation]


Previous

16.16 Potential Integrated Login and SYSGEN Problems

The Integrated Login component of Digital DCE for OpenVMS uses the SYSGEN parameter LGI_CALLOUTS. LGI_CALLOUTS must be set to 1 only in the ACTIVE SYSGEN parameter set when DCE is running with Integrated Login enabled. LGI_CALLOUTS must never be set to 1 in the CURRENT SYSGEN parameter set --- this would prevent all logins from occurring on a subsequent reboot of the system. The following paragraphs discuss the reasons for this restriction and solutions if the problem occurs.

If Integrated Login is enabled on your system, the DCE startup and configuration procedure, DCE$SETUP.COM, sets the SYSGEN parameter LGI_CALLOUTS to 1 in the ACTIVE SYSGEN parameter set when DCE is started and resets the parameter when DCE is shut down. LGI_CALLOUTS must never be set to 1 in the CURRENT SYSGEN parameter set because, in that case, the next time the system is booted the LGI_CALLOUTS parameter is set in the ACTIVE SYSGEN parameter set before DCE is started. This prevents logins from occurring.

If the ACTIVE value of LGI_CALLOUTS is set to 1 when DCE and Integrated Login are not running, the following error is displayed when LOGINOUT attempts to run (for example, for interactive or batch logins):


No logical name match 

Consequently, all users are prevented from logging in to the system.

This problem can occur if, for example, a SYSGEN parameter is modified in the following way while Integrated Login is enabled. This prevents logins because it causes LGI_CALLOUTS to be set to 1 the next time the system is booted.


$RUN SYS$SYSTEM:SYSGEN
SYSGEN>SET param value
SYSGEN>WRITE CURRENT
SYSGEN>EXIT
$

The correct way to modify a SYSGEN parameter is to make the change in MODPARAMS.DAT and then run AUTOGEN. If it is essential to modify a SYSGEN parameter without using MODPARAMS.DAT and AUTOGEN, you must ensure that if you use ACTIVE, you write the parameters into ACTIVE only; and if you use CURRENT, you write the parameters into CURRENT only. Do not copy the ACTIVE parameters into CURRENT.

Following are two examples of acceptable ways to modify a SYSGEN parameter:


$RUN SYS$SYSTEM:SYSGEN
SYSGEN>USE CURRENT
SYSGEN>SET param value
SYSGEN>WRITE CURRENT
SYSGEN>EXIT
$


$RUN SYS$SYSTEM:SYSGEN
SYSGEN>USE ACTIVE     ! optional, default is ACTIVE 
SYSGEN>SET param value
SYSGEN>WRITE ACTIVE
SYSGEN>EXIT
$

If you cannot log in because LGI_CALLOUTS is set to 1 and DCE is not running, there are two solutions, as follows:

16.17 Support for Packet Privacy

Digital DCE for OpenVMS does not support the rpc_c_prot_level_pkt_privacy level of data encryption. However, a separate kit, the Digital DCE Privacy Option Version 1.5 for OpenVMS VAX and OpenVMS Alpha, enables an optional privacy level of encryption for RPC packets and encryption of message data when calling GSSAPI if using Kerberos authentication. See your Compaq representative for information about ordering this kit.

16.18 DCE IDL Compiler with C++ Extensions and Upward Compatibility

Digital DCE for OpenVMS Version 1.5 includes a release of the IDL compiler that is part of OSF DCE Version 1.2.1. This new version of the IDL compiler includes support for object-oriented development of C++ applications. The new support allows you to use remote objects transparently from C++.

An application using this compiler in this release will be source compatible with previous and subsequent releases; no source changes are necessary.

16.19 DCE IDL Compiler and C++ Exceptions

A client using the DCE IDL compiler with C++ extensions invokes methods on objects that causes IDL generated client stub code to be invoked. By default, communications errors or remote faults that occur during the stub's processing cause exceptions to be raised using the DCE Threads exception handling mechanism. Therefore, C++ code that needs to catch and respond to these exceptions must also use the DCE Threads exception handling mechanism.

Some, but not all, C++ compilers have built-in language support for exceptions. Currently, exceptions are not supported in the DEC C++ for OpenVMS compilers. C++ application code that processes exceptions returned from DCE IDL stubs should continue to use DCE Threads exceptions.

You can avoid the raising of exceptions from DCE IDL stubs by using the [comm_status] and [fault_status] ACF attributes. For more information, see the Guidelines for Error Handling chapter in the DCE Application Development Guide.

16.20 IDL Compiler Error Message when License Not Installed

The IDL compiler requires an active software license in order to execute. Since the IDL compiler is packaged in more than one software product, there are multiple licenses that it checks for when it is invoked. If it finds none of these licenses active, it issues an error message about the last license it checked for, and then exits. For example:


$ IDL TEST.IDL 
%LICENSE-W-NOLIC, no license was found for this product - PWXXVMSDK05.01 
-RMS-E-RNF, record not found 
%LICENSE-F-NOAUTH, DEC PWXXVMSDK05.01 use is not authorized on this node 
-LICENSE-F-NOLICENSE, no license is active for this software product 
-LICENSE-I-SYSMGR, please see your system manager 

In this case, the last license checked for was PWXXVMSDK05.01. The error message might lead you to think that the PWXXVMSDK05.01 license is required for IDL to execute on Digital DCE for OpenVMS, but it is not required. If you receive an error message similar to the one above, check to make sure that an active license (such as the Application Developer's Kit license, DCE-APP-DEV) is installed.

16.21 Automatic Registration of Servers

In the IDL compiler, servers are now automatically registered by server stubs. If you call rpc_server_register_if(), the "already registered" status is returned. (Remove the call to rpc_server_register_if() from the server.cxx file before you build the example programs in Chapter 19 of the Digital DCE for OpenVMS VAX and OpenVMS Alpha Product Guide.)

16.22 Binding to a Named Object by Object Identifier

In the IDL compiler, to bind to a named object by its object ID, the argument to the bind() operation is a uuid_t reference specifying the unique identifier of the registered object in the CDS hierarchy. Section 12.3.6.3 of the Digital DCE for OpenVMS VAX and OpenVMS Alpha Product Guide should specify *bind(uuid_t &).

16.23 Support for sigwait()

The DCE Application Guide and DCE Reference Guide include incorrect information about support for sigwait(). DECthreads does not support sigwait() on the OpenVMS platform.

16.24 Server Programming

When running DCE server applications on OpenVMS Alpha V6.1 systems, it is possible to exhaust the server thread stack space if your server makes use of the %f or %e conversion characters for formatting output. For example, the following printf statement could cause an overflow of the server thread stack:


printf ("The computed value = %f\n", value); 

This error can cause the server to terminate with an unexpected error code such as an Access Violation or a Reserved Operand Fault.

If you experience this type of error, you must add a call to the RPC routine rpc_mgmt_set_server_stack_size specifying a stack size of at least 14000, prior to calling rpc_server_listen.

16.25 Compiling Stubs on Alpha

If a stub is compiled on Alpha with optimization switched on, it will not handle exceptions correctly. Therefore, on Alpha, you should compile stubs with optimization switched off.

This problem will be fixed in a future release of DEC C.

16.26 Using the -cpp_cmd (/PREPROCESS) IDL Compiler Option on OpenVMS Alpha

When you specify the -cpp_cmd (/PREPROCESS) option in an IDL command, the IDL compiler preprocesses any IDL or ACF sources by invoking the DEC C compiler with the /PREPROCESS_ONLY qualifier. Because of a bug in the DEC C compiler on OpenVMS Alpha, the IDL compiler may incorrectly report source line numbers and contents when it reports error messages.

If your IDL and ACF source files do not use C preprocessor directives (such as #define), then you do not need to specify the -cpp_cmd (/PREPROCESS) option. Otherwise, the workaround is to change multiline comments to a series of single line comments.

Documentation Error

The Digital DCE for OpenVMS VAX and OpenVMS Alpha Reference Guide, in the DCL Command Interfaces to DCE Tools chapter states that the /PREPROCESS and /NOPREPROCESS IDL compiler options are equivalent to the -cpp_cmd 'c_preprocessor_command_line' and -no_cpp arguments in the universal syntax. This is incorrect. /PREPROCESS does not accept a value (the compiler to handle the preprocessing), while the -cpp_cmd option does accept a value. Therefore, you cannot use the /PREPROCESS qualifier to compile applications requiring a preprocessor other than the default C compiler. If the C++ compiler is required, you must use the universal syntax.

16.27 POSIX and OpenVMS Alpha

On OpenVMS Alpha systems running POSIX Version 1.0, you should use only one page file. If there are multiple page files installed on the system, DCE_LOGIN may cause a system crash.

16.27.1 DEC C Applications Using G-float in the POSIX Environment

If you compile your DEC C DCE application in the POSIX environment on an OpenVMS VAX system, the DEC C compiler will not build with G-float if you specify the /G-float qualifier before the /LIBRARY qualifier on the command line.

In the following example, the DEC C compiler uses D-float even though G-float is specified:


$ cc/decc/list/mach/g_float x.c+DECC$LIBRARY_INCLUDE:DECC$RTLDEF.TLB/library 

The problem is caused by the +DECC$LIBRARY_INCLUDE:DECC$RTLDEF.TLB/library part of the command. This causes the compile to reset to the default double precision type.

To work around this problem, compile your program outside of the POSIX environment and specify the /G_float qualifier after the text library, as follows:


$ CC/DECC -             
_$ /PREFIX=(ALL,RTL="posixc$") - 
_$ /INCLUDE=POSIX$INCLUDE - 
_$ x.C + POSIX$INCLUDE:POSIX$CDEF/LIBRARY - 
_$ /G_FLOAT 

Refer to the Guide to Programming with OpenVMS POSIX for more information about compiling outside of the POSIX environment.

16.27.2 Information on the DCE Example Applications in the POSIX Environment

Seven DCE examples are on the Digital DCE for OpenVMS kit. This section lists current restrictions:

16.28 UCX Runtime Calls Not Thread Safe

Note that UCX Runtime Calls are not always thread safe.

UCX has two main application programming interfaces: VMS system services (for example, $ASSIGN, $QIO, $CANCEL) and the C socket library. Of these two, the VMS system services are fully thread-safe, while the socket library is not. The most common problem with sockets is the select() call, which blocks the entire process (not just the calling thread) until the specified I/O events occur (or the timeout expires).

16.29 C RTL Routine Sleep Not Thread Safe

The C RTL routine sleep is not thread safe. The sleep call may wake up prematurely if calls to DCE APIs are made at the same time. It is recommended that you use a thread safe mechanism such as pthread_delay_np, pthread_cond_wait, pthread_cond_timedwait, and pthread_cond_signal to delay a thread. For more information on these APIs, please refer to the OSF DCE Application Development Reference Manual.

16.30 Rebuilding DECrpc Applications Against Digital DCE

If you take advantage of the compatibility capabilities of DECrpc on Digital DCE for OpenVMS VAX, you may encounter undefined symbols when you link your application object code against the DCE library (DCE$LIB_SHR.EXE). For example, when you link the client object code of your DECrpc application interface (MY_APP) against the DCE library, you receive the following undefined symbol:


MY_APP_$CLIENT_EPV 

When you link the server object code of MY_APP against the DCE library, you receive the following undefined symbols:


MY_APP_$MANAGER_EPV 
MY_APP_$SERVER_EPV 

The following table lists the undefined symbols you receive if you use the following DECrpc include files from SYS$COMMON:[RPC$INCLUDE] in your application when you link your application object code against the DCE library (DCE$LIB_SHR.EXE).


    _______________________________________________________________ 
            If your 
            application       You receive the following undefined 
            includes...         symbols: 
    _______________________________________________________________ 
            LLB.H             LLB_$CLIENT_EPV 
                              LLB_$MANAGER_EPV 
                              LLB_$SERVER_EPV 
 
            GLB.H             GLB_$CLIENT_EPV 
                              GLB_$MANAGER_EPV 
                              GLB_$SERVER_EPV 
 
            RRPC.H            RRPC_$CLIENT_EPV 
                              RRPC_$MANAGER_EPV 
                              RRPC_$SERVER_EPV 
    ___________________________________________________________ 
 

You can ignore these undefined symbols. They are not referenced by DCE or by application code and do not affect the running of your application in any way.

16.31 Ordering of Startup Procedures

On OpenVMS VAX and OpenVMS Alpha Version 6.1 and later, the order of startup procedures follows: DECnet, TCP/IP software, then DCE.

16.32 Case-Sensitivity of DCE Utilities

Some input to Digital DCE for OpenVMS utilities is case-sensitive (for example, CDSCP entity attribute names). Since the DCL command line interface converts all input to uppercase before passing it to a utility, some input to the DCE utilities will need to be enclosed in quotation marks (" ").

When you enter commands directly at DCE utility prompts, you should not use the quotation marks because case-sensitivity is preserved. (Case-sensitivity is not preserved by the Integrated Login utilities DCE$UAF, IMPORT, and EXPORT because these are true native OpenVMS applications.)

16.33 CDSCP Commands Requiring a Local Server

There are several CDSCP commands which assume the presence of a CDS server on the local system. These commands will not execute properly in the absence of a local server. At present, CDSCP will return the following error:


Failure in routine: cp-xxxxxxx 
not registered in endpoint map (dce/rpc) 

The affected commands are:

16.34 CDSCP DUMP CLERK CACHE Command

The CDSCP command to examine the CDS cache will fail if CDSCP is run under a Process UIC other than [DCE$SERVER].


$ CDSCP DUMP CLERK CACHE 
Cannot map to memory cache -1 
Failure in routine: cadump 
Internal: Not found 

To work around this restriction, issue the following DCL command before you invoke CDSCP:


$ SET UIC [DCE$SERVER] 

Remember to reset your UIC to its original value after you use this command.

16.35 CDS Clerk Failing on UCX Shutdown

If you issue a SYS$STARTUP:UCX$SHUTDOWN command while running DCE, you may get a CDS Clerk failure and an Access Violation. You may then encounter problems restarting the CDS Clerk (and DCE itself) with the DCE$SETUP START command.

The primary problem is that UCX is being shut down while DCE is still active. Since DCE uses UCX, DCE should always be shut down first.

To recover from this problem, you need to shut down DCE first and then restart. Simply trying to restart without first shutting DCE down will not fix the underlying problem. Because temporary files may be left in an indeterminate state, you may also want to perform a DCE$SETUP CLEAN operation before restarting.

16.36 Global Directory Agent Configuration

The Global Directory Agent (GDA) is configured on the OpenVMS node that contains the CDS Master Replica name server. Make sure you choose the CUSTOM configuration option when you do the configuration. The DNS domain name (for example, zko.dec.com) and the Internet Address of an authoritative DNS Master Bind Server (for example, 16.32.2.11) are required during configuration if you are using DNS Bind style cellnames.

Before access to multiple CDS namespaces is possible, the following are required after the configuration:

  1. The Master Bind Server identified during configuration becomes the repository for information the GDA requires to resolve the Internet addresses and binding information needed by CDS to access foreign cell name spaces. This applies to DNS Bind cellnames only. See the Intercell Naming chapter in the Digital DCE for OpenVMS VAX and OpenVMS Alpha Product Guide for the binding information content, location, and access.
  2. Authenticated access to foreign (intercell) cell name space requires performing the RGY_EDIT cell command. The information needed for the cell command requires coordination with the foreign cell administrator. For more information, see both the Administering a Multicell Environment chapter in the OSF DCE Administration Guide and the Intercell Naming chapter in the Digital DCE for OpenVMS VAX and OpenVMS Alpha Product Guide.
  3. Before doing the RGY_EDIT cell command, you must first delete the krbtkt account for the foreign cell if one already exists. Similarly, the administrator for the foreign cell must also delete the krbtkt account in the foreign cell's registry for your cell. For example, if your cell is called first_cell and the foreign cell is called second_cell, then you must run RGY_EDIT on first_cell to delete the account called krbtkt/second_cell, and the administrator on second_cell must delete the registry account called krbtkt/first_cell.
    After the cell command, both cell administrators should rerun DCE_LOGIN before attempting authenticated cross-cell requests.

If you are unsuccessful in configuring intercell communication, check for the following:

17 New APIs for Authenticated RPC in DCE Version 1.5

The following APIs are included in DCE Version 1.5 to manipulate the sec_winnt_auth_identity structure.

17.1 RPC_WINNT_SET_AUTH_IDENTITY


NAME            
        rpc_winnt_set_auth_identity - This function is called by the client 
        RPC application to allocate and populate a WINNT auth_identity 
        structure to be used as a parameter to rpc_binding_set_auth_info(). 
        The caller must use the rpc_winnt_free_auth_identity() 
        function to free the WINNT auth_idenity. The strings that are 
        passed in may be ASCI or Unicode (UCS-4) strings. The input 
        flag will tell which type of strings they are. 
 
SYNOPSIS 
 
        #include <rpc.h> 
 
        PUBLIC void rpc_winnt_set_auth_identity ( 
                rpc_winnt_auth_string_p_t        Username; 
                rpc_winnt_auth_string_p_t        Password; 
                rpc_winnt_auth_string_p_t        Domain; 
                unsigned __int64                 CharacterSetFlag; 
                rpc_auth_identity_handle_t       *auth_identity; 
                unsigned32                       *stp) 
 
PARAMETERS 
 
        INPUT 
 
                username - Pointer to a null terminated string containing username. 
                password - Pointer to a null terminated string containing password. 
                domain   - Pointer to a null terminated string containing domain. 
        
        CharacterSetFlag 
 
                SEC_WINNT_AUTH_IDENTITY_UNICODE 
                        4 byte Unicode (UCS-4) 
                SEC_WINNT_AUTH_IDENTITY_ANSI 
                        ASCII (ISO8859-1) 
 
        OUTPUT 
                auth_identity - Pointer to a pointer to WINNT auth_identity structure. 
                stp - Pointer to returned status. 
 
 
NOTE: Be sure to allocate space for three strings (username, password, domain). 
      The string variables will probably be pointers of type unsigned_char_t 
      if the strings are ASCII or pointers of type wchar_t if the strings are 
      Unicode (UCS-4). 
      
      If the domain string is a valid empty string, then the domain of the 
      computer will be used. 
      


Previous Next

  [Go to the documentation home page] [How to order documentation] [Help on this site] [How to contact us]  
  privacy and legal statement  
DCE_RELNOTES_002.HTML