Thursday, November 27, 2008

"War in Mumbai": The Intertia of reactive governance

It has been more than 36 hrs since terrorists began their occupation of Mumbai and the terror continues with bouts of gun shots, fire, blasts. The message from various sources continues to be mixed with little coherance amongst various bodies involved in cleansing the terrorists. The very occupancy of the financial capital of India by these terrorists for over 36 hours is a testament of a broken system. - porous borders, ever disgruntled and never satisfied religious sect, an inefficient bureaucracy, completely broken intelligence.

To begin with the porous border, it is unbelievable at how swiftly these terrorists could gain entry into the country with all their required ammunition and communication devices. It is understandable that monitoring the wide borders is difficult. But the entry point here, the entry point was through the ocean into the heart of the city. In such a prime area how is it possible that the government had zero security. Added to this was the total failure of the intelligence. Although there are reports that fishermen did report to the cops about suspect activity by strangers, the swiftness of the terror agents was no match to the slumberness of the cops. Within 2 hrs, Mumbai was immersed in terror.

Now looking at the starking reality at how broken the communication from Ground Zero has been it is distressing. At one moment, the media reports the Mumbai Commissioner as stating the operation to be complete and in couple of hours he comes back to revert his previous statement. Disparate sources of information have only complicated the information. Unbelievable at how the government failed in anointing a joint committee consisting of all the bodies involved in the sanitization process and ensure there is one spokesperson for the whole operation?

While some of the folks on TV have made comments about a disgruntled Muslim population in India. The big question is what are these people disgruntled about? They are treated equally in all areas and have infact been given preferential treatment such as having their own colleges and universities to cater exclusively to their religious sect, laws exclusive to them to cater to their religious beliefs, unlimited access to practicing their religion and many more. While some of the people from this religious sect have integrated into the society and proven to be successful such as the Bollywood actors, it is a just a few hardcore muslim's who believe in making India a muslim nation that seem to be disgruntled. It is time for the government to send a strong message to these hardliners, believe in the nation and its laws else get out of the country, probably the country they love - Pakistan. There is no more time for negotiation and pampering.


Above all, this incident occurs after repetitive terror acts within the country. The Home department never got its act together. The rate at which terror acts have occurred in India in 2008 is appalling.
November 26: Mumbai: Over 125 killed, nearly 300 injured and still counting.
October 30: Assam: 84 killed and 470 injured.
Sep 29: Malgoan: 8 dead and 80 injured.
September 27: Delhi: 3 killed and 23 injured.
July 26: Ahmedabad: 56 dead and 200 injured.
July 25: Bangalore: 2 dead and 20 injured.
May 13: Jaipur: 80 dead and 216 injured.

An evident trend that the officials have not realized yet and prefer to be reactive to when the incidents occur rather than taking pro-active steps.

There have been few positive ends too. To mention couple of them, the first being, this is the first time the Indian government has not negotiated with hostage takers. Second and the highlight has been in the way the people in the fore front of the cleansing operation have taken on the terrorists. It would be a great injustice on my part if I do not pay tributes to these folks who have sacrificed their lives fighting the terror elements. They have been exemplary in being at the forefront of the operation, leading their men, unlike many others including the politicians who sit at their desk and command and demand from their people.
- Hemant Karkare
- Ashok Kamte
- Vijay Salaskar
- Mohan Chand Sharma
- Muralidhar Laxman Chaudhary
and many more. Officers, your loss is a great loss to the humanity and your service will ever be remembered for your braveness in being at the forefront of leading your men these senseless mindsets.

If there is any indication of this article being prejudiced against existing government or any indication of being pro-BJP, let me assure you that the wound from previous government's handling of Kandahar hijack incident still bleeds in me - an blatant act in loss of confidence in our commando's. Without going into the details, the purpose of this article is to express my strong feelings at how meek, reactive, submissive and spineless the Indian government is considered amongst the terrorist outfits.

Immaterial of external factors that may have their role in these terrorist activities, it is high time we set our house right. An awakening call can not be more glaring than what we see today in Mumbai - for the people of India, the policy makers and the politicians. Action is required - quick, swift and coherent amongst all the division of the government and political establishment. The old guard sitting in the echelons of the government - Shivraj Patil, Arjun Singh and others MUST go, with no further delay. Bring in more dynamic and younger blood. The chief's of RAW & IB MUST go. Embrace technology to secure the country's borders. The length of the operation could have been drastically reduced by incorporating technology into the operation to identify where exactly the terrorists are located using gadgets such as remote video toys. Incorporate touch laws for terrorism - immaterial of whether it is by a Hindu, Muslim, Christian or any religion, they need to face it. It is difficult to digest the fact that it has been 15 yrs since Mumbai blasts and the people who abetted the perpetrators such as Sanjay Dutt roam around scott free.

Note "If we continue in this reactive intertia mode, the day would not be far before India becomes an another Pakistan".

Thursday, November 20, 2008

WSJ.com down, exposes stack trace

The prestigious Wall Street Journal was down today sometime between 8.20 am - 8.25 am PST, as shown in the below image. Initially the website did a decent decent job in re-directing to a different page - stating the website is down due to technical difficulties.



The next time I refresh, it blew up. Check out the below image and what is displayed is a whole stack trace which bares out the internal software used - apache struts, IBM web container etc.. It looks like redirection to the error page too failed - check out the complete stack trace at the end of the blog.



The HTTP error is 400 i.e 'Bad Request' due to either the URL syntax being malformed or invalid. But since the error page could not show up, it looks like the web application has crashed. Could potentially be a result of:
* the application getting overloaded with users - more than what the application can handle?
* Maintenance of the web application? This would be weird given that it is morning time and the load on the website would be the maximum. For WSJ to undertake maintenance at this time of day would have been a very bad decision.

With regarding to stack trace being displayed, implementation of any software should be such that the exception stack trace is never be exposed outside the boundaries of the organization. The reasons for this include:
* Stack trace is a content understood by only the techies. While visitors to most of the websites are non-techies. Seeing the junk on the screen can turn their face blank, frustrated and in some cases result in moving to alternate sources of information.
* Exposure of internal implementation details. This trace clearly indicates the software WSJ uses - IBM web container, Struts, JSP. These are details internal to an organization.
* In some cases, albeit unknowingly, stack traces can expose internal implementation details that could lead to exposure of proprietary information. Added to which you never know what hackers have up their sleeves when such information is exposed. Hacking websites is not a difficult task more in these Web 2.0 days where not all the developers have an understanding of the security implications of Web 2.0. But the stack trace displayed here, to me seems harmless given that it displays trace of IBM and Struts codebase which are not proprietary to WSJ nor does it indicate usage of any Web 2.0 technologies.

To ensure the occurance of this incident, it is a good practice to re-direct the webserver to its own error page when a particular application is not available.

----------------------- Stack Trace ----------------------------------
Error page exception
The server cannot use the error page specified for your application to handle the Original Exception printed below. Please see the Error Page Exception below for a description of the problem with the specified error page.

Original Exception:
Error Message: Invalid path /WSJPageNotFound was requested
Error Code: 400
Target Servlet: action
Error Stack:
com.ibm.ws.webcontainer.webapp.WebAppErrorReport: Invalid path /WSJPageNotFound was requested
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:536)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:967)
at org.apache.struts.action.RequestProcessor.processMapping(RequestProcessor.java:684)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:242)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:989)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:501)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:464)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:321)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:320)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:989)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:501)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:464)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:744)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1439)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:112)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:454)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:383)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:263)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1469)



Error Page Exception:
Error Message: JSPG0036E: Failed to find resource /utils/error.jsp
Error Code: 404
Target Servlet: /utils/error.jsp
Error Stack:
java.io.FileNotFoundException: JSPG0036E: Failed to find resource /utils/error.jsp
at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.findWrapper(AbstractJSPExtensionProcessor.java:300)
at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.handleRequest(AbstractJSPExtensionProcessor.java:273)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:321)
at com.ibm.ws.webcontainer.webapp.WebApp.sendError(WebApp.java:2804)
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:544)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:967)
at org.apache.struts.action.RequestProcessor.processMapping(RequestProcessor.java:684)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:242)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:989)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:501)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:464)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:321)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:320)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:989)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:501)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:464)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:744)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1439)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:112)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:454)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:383)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:263)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1469)