You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by "Michael Xiong (JIRA)" <ax...@ws.apache.org> on 2006/05/26 11:30:29 UTC

[jira] Created: (AXISCPP-971) axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly

axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly
---------------------------------------------------------------------------------------------------------

         Key: AXISCPP-971
         URL: http://issues.apache.org/jira/browse/AXISCPP-971
     Project: Axis-C++
        Type: Improvement

  Components: Server - Apache module, Server - Engine  
    Versions:  1.6 Beta    
 Environment: Platform:
        Linux fedora 3.0
Axis version:
        Server-side Axis C++ 1.6Beta
XML Parser Lib:
xersesc 2.6
WSDL2ws tool by using axis java 1.3
Client-side version Axis java 1.3
Http Server Version:
Apache 2.0.53
Tomcat 2.0.58
    Reporter: Michael Xiong


I'm  developing a web service server module by axis-c  on fc3/apache2 platform.
This server module need to be accessed through basic authentication of apache2(as http standard), and it internally need to login again to the lower-level legacy privileged system.
But I found that  though axis-c engine can access username/password pair info from apache2(which checked by mod_auth module first), my server module which interacting with  axis-c engine can not get username/password directly, because axis-c engine discarded the username/password info during the communication between apache2 and  my server module.
Thus my server module can not get username/password pair from http basic authentication, which will cause my server module very difficult to login to the lower-level legacy privileged system.

I've investigated both 1.5final version and 1.6beta version, they all have the same problem.
Because the axis-c engine acting as a bridge between apache2 and my server module, so I think it's necessary to modify axis-c engine to resolve this problem.

So I'd like to give some improvement to the axis-c engine code of 1.6beta version, so that any server module can simply get the username/password pair info from IMessageData interface.
The below is my modification for this improvement, please check.(I've verified my code change on my platform, it works well)
Totally 4 source file need to be modified: 
1. include/axis/IMessageData.hpp
2. src/common/MessageData.h
3. src/engine/server/ServerAxisEngine.cpp
4. src/server/apache2/Apache2Transport.cpp

For detail, pleae refer to below:
------------------------------------------------------------------------------------------------------------
IMessageData.hpp: add two public interface:
//<mxiong debug 2006/5/25
public:
	virtual void setPassword(string& m_sPassword) = 0;
	virtual string& getPassword() = 0;
//>mxiong debug 2006/5/25

----------------------------------------------------------------------------------------------------

MessageData.h; implement the added interface which used to access password info:
//<mxiong debug 2006/5/25
public:
    void setPassword(string& sPassword) { m_sPassword = sPassword; }
    string& getPassword() { return m_sPassword; }
protected:
    string m_sPassword;
//>mxiong debug 2006/5/25
------------------------------------------------------------------------------------------------------

ServerAxisEngine.cpp: in ServerAxisEngine::process (SOAPTransport * pStream), add some code as the below:
	do
	{
	    /* populate MessageData with transport information */
	    m_pMsgData->m_Protocol = pStream->getProtocol ();
//<mxiong debug 2006/5/25
	string username;
	if (NULL!=pStream->getTransportProperty("username"))
        {
		username = (string)pStream->getTransportProperty("username");
        }
	else
        {
		username = "";
        }
	m_pMsgData->setUserName(username);
	
	string password;
	if (NULL!=pStream->getTransportProperty("password"))
        {
        	password = (string)pStream->getTransportProperty("password");
        }
	else
        {
		password = "";
        }
	m_pMsgData->setPassword(password);
//>mxiong debug 2006/5/25
	    if (AXIS_SUCCESS != m_pDZ->setInputStream (pStream))

--------------------------------------------------------------------------------------------------------------
Apache2Transport.cpp: in const char* Apache2Transport::getTransportProperty(const char* pcKey, bool response), add the below code at the beginning:
//<mxiong debug 2006/5/25
    static const char* USER_NAME = "username";
    static const char* PASSWORD = "password";
    if (!strcmp(USER_NAME, pcKey)) {
        return ((request_rec*)m_pContext)->user;
    } else if (!strcmp(PASSWORD, pcKey)) {
        const char* password = "";
        ap_get_basic_auth_pw((request_rec*)m_pContext, &password);
        return password;
    }	
//>mxiong debug 2006/5/25
-------------------------------------------------------------------------------------------------------------------


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org


[jira] Commented: (AXISCPP-971) axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly

Posted by "Michael Xiong (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-971?page=comments#action_12413411 ] 

Michael Xiong commented on AXISCPP-971:
---------------------------------------

Please notice that my improvement is for axis-c server engine, not for client engine.
I know that the axis-c client engine has already support this function, but the server engine seems NOT.

Thanks.
Michael Xiong

> axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly
> ---------------------------------------------------------------------------------------------------------
>
>          Key: AXISCPP-971
>          URL: http://issues.apache.org/jira/browse/AXISCPP-971
>      Project: Axis-C++
>         Type: Improvement

>   Components: Server - Apache module, Server - Engine
>     Versions:  1.6 Beta
>  Environment: Platform:
>         Linux fedora 3.0
> Axis version:
>         Server-side Axis C++ 1.6Beta
> XML Parser Lib:
> xersesc 2.6
> WSDL2ws tool by using axis java 1.3
> Client-side version Axis java 1.3
> Http Server Version:
> Apache 2.0.53
> Tomcat 2.0.58
>     Reporter: Michael Xiong

>
> I'm  developing a web service server module by axis-c  on fc3/apache2 platform.
> This server module need to be accessed through basic authentication of apache2(as http standard), and it internally need to login again to the lower-level legacy privileged system.
> But I found that  though axis-c engine can access username/password pair info from apache2(which checked by mod_auth module first), my server module which interacting with  axis-c engine can not get username/password directly, because axis-c engine discarded the username/password info during the communication between apache2 and  my server module.
> Thus my server module can not get username/password pair from http basic authentication, which will cause my server module very difficult to login to the lower-level legacy privileged system.
> I've investigated both 1.5final version and 1.6beta version, they all have the same problem.
> Because the axis-c engine acting as a bridge between apache2 and my server module, so I think it's necessary to modify axis-c engine to resolve this problem.
> So I'd like to give some improvement to the axis-c engine code of 1.6beta version, so that any server module can simply get the username/password pair info from IMessageData interface.
> The below is my modification for this improvement, please check.(I've verified my code change on my platform, it works well)
> Totally 4 source file need to be modified: 
> 1. include/axis/IMessageData.hpp
> 2. src/common/MessageData.h
> 3. src/engine/server/ServerAxisEngine.cpp
> 4. src/server/apache2/Apache2Transport.cpp
> For detail, pleae refer to below:
> ------------------------------------------------------------------------------------------------------------
> IMessageData.hpp: add two public interface:
> //<mxiong debug 2006/5/25
> public:
> 	virtual void setPassword(string& m_sPassword) = 0;
> 	virtual string& getPassword() = 0;
> //>mxiong debug 2006/5/25
> ----------------------------------------------------------------------------------------------------
> MessageData.h; implement the added interface which used to access password info:
> //<mxiong debug 2006/5/25
> public:
>     void setPassword(string& sPassword) { m_sPassword = sPassword; }
>     string& getPassword() { return m_sPassword; }
> protected:
>     string m_sPassword;
> //>mxiong debug 2006/5/25
> ------------------------------------------------------------------------------------------------------
> ServerAxisEngine.cpp: in ServerAxisEngine::process (SOAPTransport * pStream), add some code as the below:
> 	do
> 	{
> 	    /* populate MessageData with transport information */
> 	    m_pMsgData->m_Protocol = pStream->getProtocol ();
> //<mxiong debug 2006/5/25
> 	string username;
> 	if (NULL!=pStream->getTransportProperty("username"))
>         {
> 		username = (string)pStream->getTransportProperty("username");
>         }
> 	else
>         {
> 		username = "";
>         }
> 	m_pMsgData->setUserName(username);
> 	
> 	string password;
> 	if (NULL!=pStream->getTransportProperty("password"))
>         {
>         	password = (string)pStream->getTransportProperty("password");
>         }
> 	else
>         {
> 		password = "";
>         }
> 	m_pMsgData->setPassword(password);
> //>mxiong debug 2006/5/25
> 	    if (AXIS_SUCCESS != m_pDZ->setInputStream (pStream))
> --------------------------------------------------------------------------------------------------------------
> Apache2Transport.cpp: in const char* Apache2Transport::getTransportProperty(const char* pcKey, bool response), add the below code at the beginning:
> //<mxiong debug 2006/5/25
>     static const char* USER_NAME = "username";
>     static const char* PASSWORD = "password";
>     if (!strcmp(USER_NAME, pcKey)) {
>         return ((request_rec*)m_pContext)->user;
>     } else if (!strcmp(PASSWORD, pcKey)) {
>         const char* password = "";
>         ap_get_basic_auth_pw((request_rec*)m_pContext, &password);
>         return password;
>     }	
> //>mxiong debug 2006/5/25
> -------------------------------------------------------------------------------------------------------------------

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org


[jira] Commented: (AXISCPP-971) axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly

Posted by "Michael Xiong (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-971?page=comments#action_12413417 ] 

Michael Xiong commented on AXISCPP-971:
---------------------------------------

Dear administrator or any developer,

Sorry, I think my title should better to be changed into :
axis-c server engine: support basic authentication of apache2, thus the web service server module can get username/password pair info directly

So that it will be more easy to be understood.
Would you like to help me to update my title?

Thanks.
Michael

> axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly
> ---------------------------------------------------------------------------------------------------------
>
>          Key: AXISCPP-971
>          URL: http://issues.apache.org/jira/browse/AXISCPP-971
>      Project: Axis-C++
>         Type: Improvement

>   Components: Server - Apache module, Server - Engine
>     Versions:  1.6 Beta
>  Environment: Platform:
>         Linux fedora 3.0
> Axis version:
>         Server-side Axis C++ 1.6Beta
> XML Parser Lib:
> xersesc 2.6
> WSDL2ws tool by using axis java 1.3
> Client-side version Axis java 1.3
> Http Server Version:
> Apache 2.0.53
> Tomcat 2.0.58
>     Reporter: Michael Xiong

>
> I'm  developing a web service server module by axis-c  on fc3/apache2 platform.
> This server module need to be accessed through basic authentication of apache2(as http standard), and it internally need to login again to the lower-level legacy privileged system.
> But I found that  though axis-c engine can access username/password pair info from apache2(which checked by mod_auth module first), my server module which interacting with  axis-c engine can not get username/password directly, because axis-c engine discarded the username/password info during the communication between apache2 and  my server module.
> Thus my server module can not get username/password pair from http basic authentication, which will cause my server module very difficult to login to the lower-level legacy privileged system.
> I've investigated both 1.5final version and 1.6beta version, they all have the same problem.
> Because the axis-c engine acting as a bridge between apache2 and my server module, so I think it's necessary to modify axis-c engine to resolve this problem.
> So I'd like to give some improvement to the axis-c engine code of 1.6beta version, so that any server module can simply get the username/password pair info from IMessageData interface.
> The below is my modification for this improvement, please check.(I've verified my code change on my platform, it works well)
> Totally 4 source file need to be modified: 
> 1. include/axis/IMessageData.hpp
> 2. src/common/MessageData.h
> 3. src/engine/server/ServerAxisEngine.cpp
> 4. src/server/apache2/Apache2Transport.cpp
> For detail, pleae refer to below:
> ------------------------------------------------------------------------------------------------------------
> IMessageData.hpp: add two public interface:
> //<mxiong debug 2006/5/25
> public:
> 	virtual void setPassword(string& m_sPassword) = 0;
> 	virtual string& getPassword() = 0;
> //>mxiong debug 2006/5/25
> ----------------------------------------------------------------------------------------------------
> MessageData.h; implement the added interface which used to access password info:
> //<mxiong debug 2006/5/25
> public:
>     void setPassword(string& sPassword) { m_sPassword = sPassword; }
>     string& getPassword() { return m_sPassword; }
> protected:
>     string m_sPassword;
> //>mxiong debug 2006/5/25
> ------------------------------------------------------------------------------------------------------
> ServerAxisEngine.cpp: in ServerAxisEngine::process (SOAPTransport * pStream), add some code as the below:
> 	do
> 	{
> 	    /* populate MessageData with transport information */
> 	    m_pMsgData->m_Protocol = pStream->getProtocol ();
> //<mxiong debug 2006/5/25
> 	string username;
> 	if (NULL!=pStream->getTransportProperty("username"))
>         {
> 		username = (string)pStream->getTransportProperty("username");
>         }
> 	else
>         {
> 		username = "";
>         }
> 	m_pMsgData->setUserName(username);
> 	
> 	string password;
> 	if (NULL!=pStream->getTransportProperty("password"))
>         {
>         	password = (string)pStream->getTransportProperty("password");
>         }
> 	else
>         {
> 		password = "";
>         }
> 	m_pMsgData->setPassword(password);
> //>mxiong debug 2006/5/25
> 	    if (AXIS_SUCCESS != m_pDZ->setInputStream (pStream))
> --------------------------------------------------------------------------------------------------------------
> Apache2Transport.cpp: in const char* Apache2Transport::getTransportProperty(const char* pcKey, bool response), add the below code at the beginning:
> //<mxiong debug 2006/5/25
>     static const char* USER_NAME = "username";
>     static const char* PASSWORD = "password";
>     if (!strcmp(USER_NAME, pcKey)) {
>         return ((request_rec*)m_pContext)->user;
>     } else if (!strcmp(PASSWORD, pcKey)) {
>         const char* password = "";
>         ap_get_basic_auth_pw((request_rec*)m_pContext, &password);
>         return password;
>     }	
> //>mxiong debug 2006/5/25
> -------------------------------------------------------------------------------------------------------------------

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org


[jira] Commented: (AXISCPP-971) axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly

Posted by "Michael Xiong (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-971?page=comments#action_12437991 ] 
            
Michael Xiong commented on AXISCPP-971:
---------------------------------------

Dear all,

Environment:
Tomcat 2.0.58 should be -->
Tomcat 5.0.28

Could someboday help me to update the "Environment:" info ?

Thanks a lot !
Michael Xiong

> axis-c engine: Support Basic Authentication of apache2, thus can get username/password pair info directly
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: AXISCPP-971
>                 URL: http://issues.apache.org/jira/browse/AXISCPP-971
>             Project: Axis-C++
>          Issue Type: Improvement
>          Components: Server - Apache module, Server - Engine
>    Affects Versions:  1.6 Beta
>         Environment: Platform:
>         Linux fedora 3.0
> Axis version:
>         Server-side Axis C++ 1.6Beta
> XML Parser Lib:
> xersesc 2.6
> WSDL2ws tool by using axis java 1.3
> Client-side version Axis java 1.3
> Http Server Version:
> Apache 2.0.53
> Tomcat 2.0.58
>            Reporter: Michael Xiong
>
> I'm  developing a web service server module by axis-c  on fc3/apache2 platform.
> This server module need to be accessed through basic authentication of apache2(as http standard), and it internally need to login again to the lower-level legacy privileged system.
> But I found that  though axis-c engine can access username/password pair info from apache2(which checked by mod_auth module first), my server module which interacting with  axis-c engine can not get username/password directly, because axis-c engine discarded the username/password info during the communication between apache2 and  my server module.
> Thus my server module can not get username/password pair from http basic authentication, which will cause my server module very difficult to login to the lower-level legacy privileged system.
> I've investigated both 1.5final version and 1.6beta version, they all have the same problem.
> Because the axis-c engine acting as a bridge between apache2 and my server module, so I think it's necessary to modify axis-c engine to resolve this problem.
> So I'd like to give some improvement to the axis-c engine code of 1.6beta version, so that any server module can simply get the username/password pair info from IMessageData interface.
> The below is my modification for this improvement, please check.(I've verified my code change on my platform, it works well)
> Totally 4 source file need to be modified: 
> 1. include/axis/IMessageData.hpp
> 2. src/common/MessageData.h
> 3. src/engine/server/ServerAxisEngine.cpp
> 4. src/server/apache2/Apache2Transport.cpp
> For detail, pleae refer to below:
> ------------------------------------------------------------------------------------------------------------
> IMessageData.hpp: add two public interface:
> //<mxiong debug 2006/5/25
> public:
> 	virtual void setPassword(string& m_sPassword) = 0;
> 	virtual string& getPassword() = 0;
> //>mxiong debug 2006/5/25
> ----------------------------------------------------------------------------------------------------
> MessageData.h; implement the added interface which used to access password info:
> //<mxiong debug 2006/5/25
> public:
>     void setPassword(string& sPassword) { m_sPassword = sPassword; }
>     string& getPassword() { return m_sPassword; }
> protected:
>     string m_sPassword;
> //>mxiong debug 2006/5/25
> ------------------------------------------------------------------------------------------------------
> ServerAxisEngine.cpp: in ServerAxisEngine::process (SOAPTransport * pStream), add some code as the below:
> 	do
> 	{
> 	    /* populate MessageData with transport information */
> 	    m_pMsgData->m_Protocol = pStream->getProtocol ();
> //<mxiong debug 2006/5/25
> 	string username;
> 	if (NULL!=pStream->getTransportProperty("username"))
>         {
> 		username = (string)pStream->getTransportProperty("username");
>         }
> 	else
>         {
> 		username = "";
>         }
> 	m_pMsgData->setUserName(username);
> 	
> 	string password;
> 	if (NULL!=pStream->getTransportProperty("password"))
>         {
>         	password = (string)pStream->getTransportProperty("password");
>         }
> 	else
>         {
> 		password = "";
>         }
> 	m_pMsgData->setPassword(password);
> //>mxiong debug 2006/5/25
> 	    if (AXIS_SUCCESS != m_pDZ->setInputStream (pStream))
> --------------------------------------------------------------------------------------------------------------
> Apache2Transport.cpp: in const char* Apache2Transport::getTransportProperty(const char* pcKey, bool response), add the below code at the beginning:
> //<mxiong debug 2006/5/25
>     static const char* USER_NAME = "username";
>     static const char* PASSWORD = "password";
>     if (!strcmp(USER_NAME, pcKey)) {
>         return ((request_rec*)m_pContext)->user;
>     } else if (!strcmp(PASSWORD, pcKey)) {
>         const char* password = "";
>         ap_get_basic_auth_pw((request_rec*)m_pContext, &password);
>         return password;
>     }	
> //>mxiong debug 2006/5/25
> -------------------------------------------------------------------------------------------------------------------

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-dev-help@ws.apache.org